From ea7953e1d2578d7cf9ac8c82a64486514e105a95 Mon Sep 17 00:00:00 2001 From: Rene Engelhard Date: Tue, 6 Sep 2022 17:54:37 +0100 Subject: [PATCH] Import libreoffice_7.0.4-4+deb11u4.debian.tar.xz [dgit import tarball libreoffice 1:7.0.4-4+deb11u4 libreoffice_7.0.4-4+deb11u4.debian.tar.xz] --- debian/README | 83 + debian/README.Debian | 307 ++ debian/README.Debian-source | 82 + debian/README.qa | 59 + debian/branding/progress.conf | 1 + debian/bug-presubj | 60 + debian/changelog | Bin 0 -> 632739 bytes debian/control | Bin 0 -> 219794 bytes debian/control.evolution.in | 17 + debian/control.firebird.in | 12 + debian/control.fonts.in | 13 + debian/control.gtk3.in | 49 + debian/control.help.in | 17 + debian/control.in | 935 ++++ debian/control.kf5.in | 17 + debian/control.lang.in | 29 + debian/control.librelogo.in | 22 + debian/control.lokit.in | 16 + debian/control.mediawiki.in | 18 + debian/control.nlpsolver.in | 14 + debian/control.plasma.in | 13 + debian/control.postgresql.in | 17 + debian/control.qt5.in | 14 + debian/control.reportbuilder.in | 55 + debian/control.sdk.in | 70 + debian/control.test-packages.in | 18 + debian/control.transitionals.in | 36 + debian/control.ure.in | 199 + debian/copyright | 293 ++ debian/gir1.2-lokdocview-0.1.maintscript | 1 + debian/libjuh-java.lintian-overrides | 1 + debian/libjuh-java.poms | 28 + debian/libjurt-java.lintian-overrides | 1 + debian/libjurt-java.poms | 28 + debian/liblibreoffice-java.poms | 28 + debian/liblibreofficekitgtk.links | 1 + debian/liblibreofficekitgtk.maintscript | 1 + debian/libofficebean-java.poms | 28 + ...fice-avmedia-backend-gstreamer.maintscript | 1 + debian/libreoffice-base-core.maintscript | 1 + debian/libreoffice-base-drivers.NEWS | 14 + debian/libreoffice-base-drivers.maintscript | 1 + debian/libreoffice-base-nogui.bug-control | 2 + debian/libreoffice-base-nogui.mime | 11 + debian/libreoffice-base-nogui.ucf | 1 + debian/libreoffice-base.NEWS | 14 + debian/libreoffice-base.bug-control | 2 + debian/libreoffice-base.lintian-overrides | 1 + debian/libreoffice-base.maintscript | 1 + debian/libreoffice-base.manpages | 1 + debian/libreoffice-base.mime | 11 + debian/libreoffice-base.preinst.in | 21 + debian/libreoffice-base.ucf | 1 + .../libreoffice-calc-nogui.lintian-overrides | 1 + debian/libreoffice-calc-nogui.mime | 37 + debian/libreoffice-calc-nogui.ucf | 1 + debian/libreoffice-calc.bug-control | 1 + debian/libreoffice-calc.lintian-overrides | 2 + debian/libreoffice-calc.maintscript | 1 + debian/libreoffice-calc.manpages | 2 + debian/libreoffice-calc.mime | 37 + debian/libreoffice-calc.ucf | 1 + debian/libreoffice-common.bug-control | 1 + debian/libreoffice-common.docs | 1 + debian/libreoffice-common.links.in | 37 + debian/libreoffice-common.lintian-overrides | 2 + debian/libreoffice-common.maintscript | 11 + debian/libreoffice-common.manpages | 4 + debian/libreoffice-common.postinst.in | 43 + debian/libreoffice-common.postrm.in | 26 + debian/libreoffice-common.triggers.in | 2 + debian/libreoffice-common.ucf | 6 + debian/libreoffice-core-nogui.bug-control | 1 + debian/libreoffice-core-nogui.bug-script.in | 16 + .../libreoffice-core-nogui.lintian-overrides | 1 + debian/libreoffice-core.bug-control | 2 + debian/libreoffice-core.bug-script.in | 20 + debian/libreoffice-core.lintian-overrides | 1 + debian/libreoffice-core.maintscript | 1 + debian/libreoffice-core.postrm.in | 13 + debian/libreoffice-dev-common.maintscript | 1 + debian/libreoffice-dev-doc.links | 1 + debian/libreoffice-dev.lintian-overrides | 1 + debian/libreoffice-dev.maintscript | 1 + debian/libreoffice-draw-nogui.bug-control | 1 + debian/libreoffice-draw-nogui.mime | 13 + debian/libreoffice-draw-nogui.ucf | 2 + debian/libreoffice-draw.bug-control | 1 + debian/libreoffice-draw.lintian-overrides | 1 + debian/libreoffice-draw.maintscript | 1 + debian/libreoffice-draw.manpages | 1 + debian/libreoffice-draw.mime | 13 + debian/libreoffice-draw.ucf | 2 + debian/libreoffice-evolution.bug-control | 1 + debian/libreoffice-evolution.maintscript | 1 + debian/libreoffice-evolution.ucf | 1 + debian/libreoffice-gnome.maintscript | 1 + debian/libreoffice-gnome.ucf | 1 + debian/libreoffice-gtk3.maintscript | 1 + .../libreoffice-help-ca-valencia.maintscript | 1 + debian/libreoffice-help-ca.maintscript | 1 + debian/libreoffice-help-common.links | 1 + debian/libreoffice-help-common.maintscript | 1 + debian/libreoffice-help-cs.maintscript | 1 + debian/libreoffice-help-da.maintscript | 1 + debian/libreoffice-help-de.maintscript | 1 + debian/libreoffice-help-dz.maintscript | 1 + debian/libreoffice-help-el.maintscript | 1 + debian/libreoffice-help-en-gb.maintscript | 1 + debian/libreoffice-help-en-us.maintscript | 1 + debian/libreoffice-help-es.maintscript | 1 + debian/libreoffice-help-et.maintscript | 1 + debian/libreoffice-help-eu.maintscript | 1 + debian/libreoffice-help-fi.maintscript | 1 + debian/libreoffice-help-fr.maintscript | 1 + debian/libreoffice-help-gl.maintscript | 1 + debian/libreoffice-help-hi.maintscript | 1 + debian/libreoffice-help-hu.maintscript | 1 + debian/libreoffice-help-id.maintscript | 1 + debian/libreoffice-help-it.maintscript | 1 + debian/libreoffice-help-ja.maintscript | 1 + debian/libreoffice-help-km.maintscript | 1 + debian/libreoffice-help-ko.maintscript | 1 + debian/libreoffice-help-nl.maintscript | 1 + debian/libreoffice-help-om.maintscript | 1 + debian/libreoffice-help-pl.maintscript | 1 + debian/libreoffice-help-pt-br.maintscript | 1 + debian/libreoffice-help-pt.maintscript | 1 + debian/libreoffice-help-ru.maintscript | 1 + debian/libreoffice-help-sk.maintscript | 1 + debian/libreoffice-help-sl.maintscript | 1 + debian/libreoffice-help-sv.maintscript | 1 + debian/libreoffice-help-tr.maintscript | 1 + debian/libreoffice-help-vi.maintscript | 1 + debian/libreoffice-help-zh-cn.maintscript | 1 + debian/libreoffice-help-zh-tw.maintscript | 1 + debian/libreoffice-help.lintian-overrides.in | 15 + debian/libreoffice-impress-nogui.bug-control | 1 + debian/libreoffice-impress-nogui.mime | 25 + debian/libreoffice-impress-nogui.ucf | 1 + debian/libreoffice-impress.bug-control | 1 + debian/libreoffice-impress.lintian-overrides | 1 + debian/libreoffice-impress.maintscript | 1 + debian/libreoffice-impress.manpages | 1 + debian/libreoffice-impress.mime | 25 + debian/libreoffice-impress.ucf | 2 + debian/libreoffice-java-common.maintscript | 1 + debian/libreoffice-kde5.maintscript | 1 + debian/libreoffice-kf5.maintscript | 1 + debian/libreoffice-l10n-af.maintscript | 1 + debian/libreoffice-l10n-am.maintscript | 1 + debian/libreoffice-l10n-ar.maintscript | 1 + debian/libreoffice-l10n-as.maintscript | 1 + debian/libreoffice-l10n-ast.maintscript | 1 + debian/libreoffice-l10n-be.maintscript | 1 + debian/libreoffice-l10n-bg.maintscript | 1 + debian/libreoffice-l10n-bn.maintscript | 1 + debian/libreoffice-l10n-br.maintscript | 1 + debian/libreoffice-l10n-bs.maintscript | 1 + debian/libreoffice-l10n-ca.maintscript | 1 + debian/libreoffice-l10n-cs.maintscript | 1 + debian/libreoffice-l10n-cy.maintscript | 1 + debian/libreoffice-l10n-da.maintscript | 1 + debian/libreoffice-l10n-de.maintscript | 1 + debian/libreoffice-l10n-dz.maintscript | 1 + debian/libreoffice-l10n-el.maintscript | 1 + debian/libreoffice-l10n-en-gb.maintscript | 1 + debian/libreoffice-l10n-en-us.maintscript | 1 + debian/libreoffice-l10n-en-za.maintscript | 1 + debian/libreoffice-l10n-eo.maintscript | 1 + debian/libreoffice-l10n-es.maintscript | 1 + debian/libreoffice-l10n-et.maintscript | 1 + debian/libreoffice-l10n-eu.maintscript | 1 + debian/libreoffice-l10n-fa.maintscript | 1 + debian/libreoffice-l10n-fi.maintscript | 1 + debian/libreoffice-l10n-fr.maintscript | 1 + debian/libreoffice-l10n-ga.maintscript | 1 + debian/libreoffice-l10n-gd.maintscript | 1 + debian/libreoffice-l10n-gl.maintscript | 1 + debian/libreoffice-l10n-gu.maintscript | 1 + debian/libreoffice-l10n-gug.maintscript | 1 + debian/libreoffice-l10n-he.maintscript | 1 + debian/libreoffice-l10n-hi.maintscript | 1 + debian/libreoffice-l10n-hr.maintscript | 1 + debian/libreoffice-l10n-hu.maintscript | 1 + debian/libreoffice-l10n-id.maintscript | 1 + debian/libreoffice-l10n-in.lintian-overrides | 2 + debian/libreoffice-l10n-in.maintscript | 1 + debian/libreoffice-l10n-is.maintscript | 1 + debian/libreoffice-l10n-it.maintscript | 1 + debian/libreoffice-l10n-ja.maintscript | 1 + debian/libreoffice-l10n-ka.maintscript | 1 + debian/libreoffice-l10n-kk.maintscript | 1 + debian/libreoffice-l10n-km.maintscript | 1 + debian/libreoffice-l10n-kmr.maintscript | 1 + debian/libreoffice-l10n-kn.maintscript | 1 + debian/libreoffice-l10n-ko.maintscript | 1 + debian/libreoffice-l10n-lt.maintscript | 1 + debian/libreoffice-l10n-lv.maintscript | 1 + debian/libreoffice-l10n-mk.maintscript | 1 + debian/libreoffice-l10n-ml.maintscript | 1 + debian/libreoffice-l10n-mn.maintscript | 1 + debian/libreoffice-l10n-mr.maintscript | 1 + debian/libreoffice-l10n-nb.maintscript | 1 + debian/libreoffice-l10n-ne.maintscript | 1 + debian/libreoffice-l10n-nl.maintscript | 1 + debian/libreoffice-l10n-nn.maintscript | 1 + debian/libreoffice-l10n-nr.maintscript | 1 + debian/libreoffice-l10n-nso.maintscript | 1 + debian/libreoffice-l10n-oc.maintscript | 1 + debian/libreoffice-l10n-om.maintscript | 1 + debian/libreoffice-l10n-or.maintscript | 1 + debian/libreoffice-l10n-pa-in.maintscript | 1 + debian/libreoffice-l10n-pl.maintscript | 1 + debian/libreoffice-l10n-pt-br.maintscript | 1 + debian/libreoffice-l10n-pt.maintscript | 1 + debian/libreoffice-l10n-ro.maintscript | 1 + debian/libreoffice-l10n-ru.maintscript | 1 + debian/libreoffice-l10n-rw.maintscript | 1 + debian/libreoffice-l10n-si.maintscript | 1 + debian/libreoffice-l10n-sk.maintscript | 1 + debian/libreoffice-l10n-sl.maintscript | 1 + debian/libreoffice-l10n-sr.maintscript | 1 + debian/libreoffice-l10n-ss.maintscript | 1 + debian/libreoffice-l10n-st.maintscript | 1 + debian/libreoffice-l10n-sv.maintscript | 1 + debian/libreoffice-l10n-ta.maintscript | 1 + debian/libreoffice-l10n-te.maintscript | 1 + debian/libreoffice-l10n-tg.maintscript | 1 + debian/libreoffice-l10n-th.maintscript | 1 + debian/libreoffice-l10n-tn.maintscript | 1 + debian/libreoffice-l10n-tr.maintscript | 1 + debian/libreoffice-l10n-ts.maintscript | 1 + debian/libreoffice-l10n-ug.maintscript | 1 + debian/libreoffice-l10n-uk.maintscript | 1 + debian/libreoffice-l10n-uz.maintscript | 1 + debian/libreoffice-l10n-ve.maintscript | 1 + debian/libreoffice-l10n-vi.maintscript | 1 + debian/libreoffice-l10n-xh.maintscript | 1 + debian/libreoffice-l10n-za.lintian-overrides | 2 + debian/libreoffice-l10n-za.maintscript | 1 + debian/libreoffice-l10n-zh-cn.maintscript | 1 + debian/libreoffice-l10n-zh-tw.maintscript | 1 + debian/libreoffice-l10n-zu.maintscript | 1 + debian/libreoffice-l10n.ucf.in | 3 + debian/libreoffice-librelogo.ucf | 1 + debian/libreoffice-math-nogui.bug-control | 1 + debian/libreoffice-math-nogui.mime | 14 + debian/libreoffice-math-nogui.ucf | 1 + debian/libreoffice-math.bug-control | 1 + debian/libreoffice-math.lintian-overrides | 1 + debian/libreoffice-math.maintscript | 1 + debian/libreoffice-math.manpages | 1 + debian/libreoffice-math.mime | 14 + debian/libreoffice-math.ucf | 1 + .../libreoffice-mysql-connector.maintscript | 1 + debian/libreoffice-nlpsolver.bug-script.in | 2 + .../libreoffice-nlpsolver.lintian-overrides | 1 + debian/libreoffice-officebean.maintscript | 1 + debian/libreoffice-plasma.maintscript | 1 + debian/libreoffice-qt5.maintscript | 1 + ...libreoffice-report-builder-bin.maintscript | 1 + debian/libreoffice-report-builder.bug-control | 1 + debian/libreoffice-report-builder.maintscript | 1 + debian/libreoffice-report-builder.ucf | 1 + ...ibreoffice-script-provider-bsh.maintscript | 1 + ...libreoffice-script-provider-js.maintscript | 1 + ...eoffice-script-provider-python.bug-control | 1 + ...eoffice-script-provider-python.maintscript | 1 + debian/libreoffice-sdbc-firebird.NEWS | 21 + debian/libreoffice-sdbc-firebird.maintscript | 1 + debian/libreoffice-sdbc-hsqldb.maintscript | 1 + debian/libreoffice-sdbc-mysql.maintscript | 1 + .../libreoffice-sdbc-postgresql.maintscript | 2 + debian/libreoffice-sdbc-postgresql.ucf | 1 + debian/libreoffice-style-breeze.maintscript | 1 + debian/libreoffice-style-colibre.maintscript | 1 + .../libreoffice-style-elementary.maintscript | 1 + .../libreoffice-style-karasa-jaga.maintscript | 1 + debian/libreoffice-style-sifr.maintscript | 1 + debian/libreoffice-style-tango.maintscript | 1 + ...ibreoffice-subsequentcheckbase.maintscript | 1 + .../libreoffice-wiki-publisher.bug-script.in | 2 + ...breoffice-wiki-publisher.lintian-overrides | 1 + debian/libreoffice-writer-nogui.bug-control | 1 + debian/libreoffice-writer-nogui.mime | 37 + debian/libreoffice-writer-nogui.ucf | 1 + debian/libreoffice-writer.bug-control | 1 + debian/libreoffice-writer.lintian-overrides | 1 + debian/libreoffice-writer.maintscript | 1 + debian/libreoffice-writer.manpages | 3 + debian/libreoffice-writer.mime | 37 + debian/libreoffice-writer.ucf | 1 + debian/libreoffice.bug-control | 2 + debian/libreofficekit-data.maintscript | 1 + debian/libreofficekit-dev.docs | 1 + debian/libridl-java.lintian-overrides | 1 + debian/libridl-java.poms | 28 + debian/libuno-cppu3.symbols | 9 + .../libuno-cppuhelpergcc3-3.lintian-overrides | 1 + debian/libuno-cppuhelpergcc3-3.symbols | 15 + debian/libuno-purpenvhelpergcc3-3.symbols | 5 + debian/libuno-sal3.symbols | 38 + debian/libuno-salhelpergcc3-3.symbols | 7 + debian/libunoil-java.lintian-overrides | 1 + debian/libunoil-java.poms | 28 + debian/libunoloader-java.poms | 28 + ...305-compare-authors-using-Thumbprint.patch | 63 + ...07-make-hash-encoding-match-decoding.patch | 183 + ...dd-Initialization-Vectors-to-passwor.patch | 583 +++ ...7-add-infobar-to-prompt-to-refresh-t.patch | 117 + debian/patches/ZDI-CAN-17859.diff | 290 ++ debian/patches/add-access2base-doc.diff | Bin 0 -> 1308520 bytes .../patches/apparmor-allow-java.security.diff | 14 + debian/patches/apparmor-cleanups.diff | 105 + debian/patches/apparmor-complain.diff | 26 + debian/patches/apparmor-mesa.diff | 10 + debian/patches/apparmor-opencl.diff | 20 + debian/patches/apparmor-updates.diff | 13 + .../patches/appstream-ignore-startcenter.diff | 10 + ...4f80577de9ff69e58390c6f6ef949fdb0139.patch | 63 + .../patches/bash-completion-DRAWDOCS-pdf.diff | 26 + debian/patches/bigendian.diff | 352 ++ .../patches/build-against-shared-lpsolve.diff | 27 + debian/patches/cppunit-optional.diff | 185 + debian/patches/debian-debug.diff | 47 + .../debian-hardened-buildflags-CPPFLAGS.diff | 37 + ...ldflags-no-LO-fstack-protector-strong.diff | 32 + debian/patches/debian-opt.diff | 26 + ...fault-to-CertificateValidity::INVALID.diff | 52 + debian/patches/disable-flaky-tests.diff | 141 + ...java-in-odk-build-examples-on-zero-vm.diff | 58 + ...sable-shortcuts_tab_navigation-uitest.diff | 49 + .../patches/disable-unused-test-programs.diff | 70 + debian/patches/disableClassPathURLCheck.diff | 10 + debian/patches/do-not-hide-test-output.diff | 99 + debian/patches/dont-touch-urd.diff | 80 + debian/patches/fix-bluez-external.diff | 23 + ...e_book_client_connect_direct_sync-sig.diff | 26 + debian/patches/fix-flaky-bridgetest.diff | 46 + debian/patches/fix-internal-hsqldb-build.diff | 45 + debian/patches/fix-lo-xlate-lang-nb.diff | 13 + debian/patches/fix-system-lpsolve-build.diff | 31 + .../patches/fix-uicheck-tests-on-i386.patch | 34 + debian/patches/help-msg-add-package-info.diff | 13 + debian/patches/hide-math-desktop-file.patch | 15 + debian/patches/hppa-is-32bit.diff | 13 + debian/patches/hrk-euro.diff | 156 + debian/patches/install-fixes.diff | 166 + debian/patches/javadoc-optional.diff | 153 + debian/patches/jdbc-driver-classpaths.diff | 35 + debian/patches/jurt-soffice-location.diff | 20 + debian/patches/liborcus-0.16.diff | 1255 ++++++ .../make-package-modules-not-suck.diff | 200 + debian/patches/mediwiki-oor-replace.diff | 51 + .../patches/mention-java-common-package.diff | 35 + debian/patches/no-check-if-root.diff | 26 + debian/patches/no-opencl-per-default.diff | 26 + debian/patches/no-openssl.diff | 357 ++ debian/patches/no-packagekit-per-default.diff | 21 + debian/patches/pdfium-m68k.diff | 20 + .../patches/reportdesign-mention-package.diff | 13 + debian/patches/sc-opengl-optional.diff | 26 + .../patches/search-usr-share-for-images.diff | 137 + debian/patches/sensible-lomua.diff | 50 + debian/patches/series | 66 + debian/patches/split-evoab.diff | 61 + .../system-officeotron-and-odfvalidator.diff | 16 + debian/patches/unowinreg-static-libgcc.diff | 13 + ...se-mariadb-java-instead-of-mysql-java.diff | 59 + ...er-confused-about-multiple-timestamps.diff | 393 ++ ...ements-in-ds:Object-that-arent-signed.diff | 740 ++++ ...andling-of-multiple-X509Data-elements.diff | 1597 +++++++ ...ity-replace-XSecParser-implementation.diff | 2170 +++++++++ debian/python3-access2base.links | 1 + debian/python3-uno.NEWS | 11 + debian/python3-uno.ucf | 1 + debian/rules | 3913 +++++++++++++++++ debian/scripts/fix_component_tarballs.sh | 36 + debian/scripts/get_libebook_dep.sh | 33 + debian/scripts/gid2pkgdirs.sh | 177 + debian/scripts/joinctrl.py | 66 + debian/scripts/locale-gen | 32 + debian/scripts/move-if-change | 32 + debian/scripts/stat_pos.sh | 32 + debian/shell-lib-extensions.sh | 10 + debian/shell-lib-lool.sh | 5 + debian/shlibs.override.icu | 5 + debian/shlibs.override.libc | 1 + debian/shlibs.override.libcmis | 2 + debian/shlibs.override.libetonyek | 1 + debian/shlibs.override.liblangtag | 1 + debian/shlibs.override.libmwaw | 1 + debian/shlibs.override.libodfgen | 1 + debian/shlibs.override.librevenge | 1 + debian/shlibs.override.libstaroffice | 1 + debian/shlibs.override.libvisio | 1 + debian/shlibs.override.libwpd | 1 + debian/shlibs.override.libwpg | 1 + debian/shlibs.override.libwps | 1 + debian/shlibs.override.orcus | 2 + debian/soffice.sh | 21 + debian/source/format | 1 + debian/source/include-binaries | 9 + debian/source/lintian-overrides | 5 + .../debian-presentation-background.xcf | Bin 0 -> 2202921 bytes debian/templates/debian-presentation.otp | Bin 0 -> 726796 bytes debian/templates/soffice-template.desktop.in | 8 + debian/tests/access2base-import | 4 + debian/tests/control | 82 + debian/tests/control.in | 82 + debian/tests/junit | 62 + debian/tests/odk-build-examples | 41 + debian/tests/odk-build-examples-java | 47 + debian/tests/patches/disable-db-tests.diff | 130 + .../java-subsequentcheck-standalone.diff | 126 + .../odk-build-examples-standalone.diff | 50 + .../smoketest-disable-extension-tests.diff | 98 + .../tests/patches/smoketest-standalone.diff | 32 + .../tests/patches/testtools-standalone.diff | 227 + debian/tests/patches/uicheck-standalone.diff | 69 + debian/tests/pyuno-import | 8 + debian/tests/smoketest | 87 + debian/tests/test-extension | 33 + debian/tests/test-extension-shared | 34 + debian/tests/uicheck-cui | 61 + debian/tests/uicheck-sc | 61 + debian/tests/uicheck-sd | 61 + debian/tests/uicheck-sw | 61 + debian/tests/uicheck-uitest | 61 + debian/tests/uicheck-writerperfect | 61 + debian/tests/uno | 55 + debian/tests/uno-import | 4 + debian/upstream/metadata | 7 + debian/upstream/signing-key.asc | 66 + debian/ure.bug-script.in | 5 + debian/ure.lintian-overrides | 1 + debian/vars.alpha | 1 + debian/vars.amd64 | 1 + debian/vars.arm | 1 + debian/vars.arm64 | 1 + debian/vars.armel | 1 + debian/vars.armhf | 1 + debian/vars.hppa | 1 + debian/vars.i386 | 1 + debian/vars.ia64 | 1 + debian/vars.kfreebsd-amd64 | 1 + debian/vars.kfreebsd-i386 | 1 + debian/vars.m68k | 1 + debian/vars.mips | 1 + debian/vars.mips64 | 1 + debian/vars.mips64el | 1 + debian/vars.mipsel | 1 + debian/vars.powerpc | 1 + debian/vars.powerpcspe | 1 + debian/vars.ppc64 | 1 + debian/vars.ppc64el | 1 + debian/vars.s390 | 1 + debian/vars.s390x | 1 + debian/vars.solaris-i386 | 1 + debian/vars.sparc | 1 + debian/vars.sparc64 | 1 + debian/watch | 36 + debian/xmerge-javadoc.in | 7 + ...d2df8893241173de1d16b6034c0-swingExSrc.zip | Bin 0 -> 9796 bytes ...ffdc8bcfe7bca2cf92b62caf685-rhino1_5R5.zip | Bin 0 -> 1521926 bytes ...59eafb2677d7ff386a023bc40-xsltml_2.1.2.zip | Bin 0 -> 23150 bytes tarballs/dtoa-20180411.tgz | Bin 0 -> 48893 bytes tarballs/pdfium-4306.tar.bz2 | Bin 0 -> 7220464 bytes ...6daef6bfb774a325a069eda1f76ca6ac26c.tar.xz | Bin 0 -> 8375536 bytes 470 files changed, 20637 insertions(+) create mode 100644 debian/README create mode 100644 debian/README.Debian create mode 100644 debian/README.Debian-source create mode 100644 debian/README.qa create mode 100644 debian/branding/progress.conf create mode 100644 debian/bug-presubj create mode 100644 debian/changelog create mode 100644 debian/control create mode 100644 debian/control.evolution.in create mode 100644 debian/control.firebird.in create mode 100644 debian/control.fonts.in create mode 100644 debian/control.gtk3.in create mode 100644 debian/control.help.in create mode 100644 debian/control.in create mode 100644 debian/control.kf5.in create mode 100644 debian/control.lang.in create mode 100644 debian/control.librelogo.in create mode 100644 debian/control.lokit.in create mode 100644 debian/control.mediawiki.in create mode 100644 debian/control.nlpsolver.in create mode 100644 debian/control.plasma.in create mode 100644 debian/control.postgresql.in create mode 100644 debian/control.qt5.in create mode 100644 debian/control.reportbuilder.in create mode 100644 debian/control.sdk.in create mode 100644 debian/control.test-packages.in create mode 100644 debian/control.transitionals.in create mode 100644 debian/control.ure.in create mode 100644 debian/copyright create mode 100644 debian/gir1.2-lokdocview-0.1.maintscript create mode 100644 debian/libjuh-java.lintian-overrides create mode 100644 debian/libjuh-java.poms create mode 100644 debian/libjurt-java.lintian-overrides create mode 100644 debian/libjurt-java.poms create mode 100644 debian/liblibreoffice-java.poms create mode 100644 debian/liblibreofficekitgtk.links create mode 100644 debian/liblibreofficekitgtk.maintscript create mode 100644 debian/libofficebean-java.poms create mode 100644 debian/libreoffice-avmedia-backend-gstreamer.maintscript create mode 100644 debian/libreoffice-base-core.maintscript create mode 100644 debian/libreoffice-base-drivers.NEWS create mode 100644 debian/libreoffice-base-drivers.maintscript create mode 100644 debian/libreoffice-base-nogui.bug-control create mode 100644 debian/libreoffice-base-nogui.mime create mode 100644 debian/libreoffice-base-nogui.ucf create mode 100644 debian/libreoffice-base.NEWS create mode 100644 debian/libreoffice-base.bug-control create mode 100644 debian/libreoffice-base.lintian-overrides create mode 100644 debian/libreoffice-base.maintscript create mode 100644 debian/libreoffice-base.manpages create mode 100644 debian/libreoffice-base.mime create mode 100644 debian/libreoffice-base.preinst.in create mode 100644 debian/libreoffice-base.ucf create mode 100644 debian/libreoffice-calc-nogui.lintian-overrides create mode 100644 debian/libreoffice-calc-nogui.mime create mode 100644 debian/libreoffice-calc-nogui.ucf create mode 100644 debian/libreoffice-calc.bug-control create mode 100644 debian/libreoffice-calc.lintian-overrides create mode 100644 debian/libreoffice-calc.maintscript create mode 100644 debian/libreoffice-calc.manpages create mode 100644 debian/libreoffice-calc.mime create mode 100644 debian/libreoffice-calc.ucf create mode 100644 debian/libreoffice-common.bug-control create mode 100644 debian/libreoffice-common.docs create mode 100644 debian/libreoffice-common.links.in create mode 100644 debian/libreoffice-common.lintian-overrides create mode 100644 debian/libreoffice-common.maintscript create mode 100644 debian/libreoffice-common.manpages create mode 100644 debian/libreoffice-common.postinst.in create mode 100644 debian/libreoffice-common.postrm.in create mode 100644 debian/libreoffice-common.triggers.in create mode 100644 debian/libreoffice-common.ucf create mode 100644 debian/libreoffice-core-nogui.bug-control create mode 100755 debian/libreoffice-core-nogui.bug-script.in create mode 100644 debian/libreoffice-core-nogui.lintian-overrides create mode 100644 debian/libreoffice-core.bug-control create mode 100755 debian/libreoffice-core.bug-script.in create mode 100644 debian/libreoffice-core.lintian-overrides create mode 100644 debian/libreoffice-core.maintscript create mode 100755 debian/libreoffice-core.postrm.in create mode 100644 debian/libreoffice-dev-common.maintscript create mode 100644 debian/libreoffice-dev-doc.links create mode 100644 debian/libreoffice-dev.lintian-overrides create mode 100644 debian/libreoffice-dev.maintscript create mode 100644 debian/libreoffice-draw-nogui.bug-control create mode 100644 debian/libreoffice-draw-nogui.mime create mode 100644 debian/libreoffice-draw-nogui.ucf create mode 100644 debian/libreoffice-draw.bug-control create mode 100644 debian/libreoffice-draw.lintian-overrides create mode 100644 debian/libreoffice-draw.maintscript create mode 100644 debian/libreoffice-draw.manpages create mode 100644 debian/libreoffice-draw.mime create mode 100644 debian/libreoffice-draw.ucf create mode 100644 debian/libreoffice-evolution.bug-control create mode 100644 debian/libreoffice-evolution.maintscript create mode 100644 debian/libreoffice-evolution.ucf create mode 100644 debian/libreoffice-gnome.maintscript create mode 100644 debian/libreoffice-gnome.ucf create mode 100644 debian/libreoffice-gtk3.maintscript create mode 100644 debian/libreoffice-help-ca-valencia.maintscript create mode 100644 debian/libreoffice-help-ca.maintscript create mode 100644 debian/libreoffice-help-common.links create mode 100644 debian/libreoffice-help-common.maintscript create mode 100644 debian/libreoffice-help-cs.maintscript create mode 100644 debian/libreoffice-help-da.maintscript create mode 100644 debian/libreoffice-help-de.maintscript create mode 100644 debian/libreoffice-help-dz.maintscript create mode 100644 debian/libreoffice-help-el.maintscript create mode 100644 debian/libreoffice-help-en-gb.maintscript create mode 100644 debian/libreoffice-help-en-us.maintscript create mode 100644 debian/libreoffice-help-es.maintscript create mode 100644 debian/libreoffice-help-et.maintscript create mode 100644 debian/libreoffice-help-eu.maintscript create mode 100644 debian/libreoffice-help-fi.maintscript create mode 100644 debian/libreoffice-help-fr.maintscript create mode 100644 debian/libreoffice-help-gl.maintscript create mode 100644 debian/libreoffice-help-hi.maintscript create mode 100644 debian/libreoffice-help-hu.maintscript create mode 100644 debian/libreoffice-help-id.maintscript create mode 100644 debian/libreoffice-help-it.maintscript create mode 100644 debian/libreoffice-help-ja.maintscript create mode 100644 debian/libreoffice-help-km.maintscript create mode 100644 debian/libreoffice-help-ko.maintscript create mode 100644 debian/libreoffice-help-nl.maintscript create mode 100644 debian/libreoffice-help-om.maintscript create mode 100644 debian/libreoffice-help-pl.maintscript create mode 100644 debian/libreoffice-help-pt-br.maintscript create mode 100644 debian/libreoffice-help-pt.maintscript create mode 100644 debian/libreoffice-help-ru.maintscript create mode 100644 debian/libreoffice-help-sk.maintscript create mode 100644 debian/libreoffice-help-sl.maintscript create mode 100644 debian/libreoffice-help-sv.maintscript create mode 100644 debian/libreoffice-help-tr.maintscript create mode 100644 debian/libreoffice-help-vi.maintscript create mode 100644 debian/libreoffice-help-zh-cn.maintscript create mode 100644 debian/libreoffice-help-zh-tw.maintscript create mode 100644 debian/libreoffice-help.lintian-overrides.in create mode 100644 debian/libreoffice-impress-nogui.bug-control create mode 100644 debian/libreoffice-impress-nogui.mime create mode 100644 debian/libreoffice-impress-nogui.ucf create mode 100644 debian/libreoffice-impress.bug-control create mode 100644 debian/libreoffice-impress.lintian-overrides create mode 100644 debian/libreoffice-impress.maintscript create mode 100644 debian/libreoffice-impress.manpages create mode 100644 debian/libreoffice-impress.mime create mode 100644 debian/libreoffice-impress.ucf create mode 100644 debian/libreoffice-java-common.maintscript create mode 100644 debian/libreoffice-kde5.maintscript create mode 100644 debian/libreoffice-kf5.maintscript create mode 100644 debian/libreoffice-l10n-af.maintscript create mode 100644 debian/libreoffice-l10n-am.maintscript create mode 100644 debian/libreoffice-l10n-ar.maintscript create mode 100644 debian/libreoffice-l10n-as.maintscript create mode 100644 debian/libreoffice-l10n-ast.maintscript create mode 100644 debian/libreoffice-l10n-be.maintscript create mode 100644 debian/libreoffice-l10n-bg.maintscript create mode 100644 debian/libreoffice-l10n-bn.maintscript create mode 100644 debian/libreoffice-l10n-br.maintscript create mode 100644 debian/libreoffice-l10n-bs.maintscript create mode 100644 debian/libreoffice-l10n-ca.maintscript create mode 100644 debian/libreoffice-l10n-cs.maintscript create mode 100644 debian/libreoffice-l10n-cy.maintscript create mode 100644 debian/libreoffice-l10n-da.maintscript create mode 100644 debian/libreoffice-l10n-de.maintscript create mode 100644 debian/libreoffice-l10n-dz.maintscript create mode 100644 debian/libreoffice-l10n-el.maintscript create mode 100644 debian/libreoffice-l10n-en-gb.maintscript create mode 100644 debian/libreoffice-l10n-en-us.maintscript create mode 100644 debian/libreoffice-l10n-en-za.maintscript create mode 100644 debian/libreoffice-l10n-eo.maintscript create mode 100644 debian/libreoffice-l10n-es.maintscript create mode 100644 debian/libreoffice-l10n-et.maintscript create mode 100644 debian/libreoffice-l10n-eu.maintscript create mode 100644 debian/libreoffice-l10n-fa.maintscript create mode 100644 debian/libreoffice-l10n-fi.maintscript create mode 100644 debian/libreoffice-l10n-fr.maintscript create mode 100644 debian/libreoffice-l10n-ga.maintscript create mode 100644 debian/libreoffice-l10n-gd.maintscript create mode 100644 debian/libreoffice-l10n-gl.maintscript create mode 100644 debian/libreoffice-l10n-gu.maintscript create mode 100644 debian/libreoffice-l10n-gug.maintscript create mode 100644 debian/libreoffice-l10n-he.maintscript create mode 100644 debian/libreoffice-l10n-hi.maintscript create mode 100644 debian/libreoffice-l10n-hr.maintscript create mode 100644 debian/libreoffice-l10n-hu.maintscript create mode 100644 debian/libreoffice-l10n-id.maintscript create mode 100644 debian/libreoffice-l10n-in.lintian-overrides create mode 100644 debian/libreoffice-l10n-in.maintscript create mode 100644 debian/libreoffice-l10n-is.maintscript create mode 100644 debian/libreoffice-l10n-it.maintscript create mode 100644 debian/libreoffice-l10n-ja.maintscript create mode 100644 debian/libreoffice-l10n-ka.maintscript create mode 100644 debian/libreoffice-l10n-kk.maintscript create mode 100644 debian/libreoffice-l10n-km.maintscript create mode 100644 debian/libreoffice-l10n-kmr.maintscript create mode 100644 debian/libreoffice-l10n-kn.maintscript create mode 100644 debian/libreoffice-l10n-ko.maintscript create mode 100644 debian/libreoffice-l10n-lt.maintscript create mode 100644 debian/libreoffice-l10n-lv.maintscript create mode 100644 debian/libreoffice-l10n-mk.maintscript create mode 100644 debian/libreoffice-l10n-ml.maintscript create mode 100644 debian/libreoffice-l10n-mn.maintscript create mode 100644 debian/libreoffice-l10n-mr.maintscript create mode 100644 debian/libreoffice-l10n-nb.maintscript create mode 100644 debian/libreoffice-l10n-ne.maintscript create mode 100644 debian/libreoffice-l10n-nl.maintscript create mode 100644 debian/libreoffice-l10n-nn.maintscript create mode 100644 debian/libreoffice-l10n-nr.maintscript create mode 100644 debian/libreoffice-l10n-nso.maintscript create mode 100644 debian/libreoffice-l10n-oc.maintscript create mode 100644 debian/libreoffice-l10n-om.maintscript create mode 100644 debian/libreoffice-l10n-or.maintscript create mode 100644 debian/libreoffice-l10n-pa-in.maintscript create mode 100644 debian/libreoffice-l10n-pl.maintscript create mode 100644 debian/libreoffice-l10n-pt-br.maintscript create mode 100644 debian/libreoffice-l10n-pt.maintscript create mode 100644 debian/libreoffice-l10n-ro.maintscript create mode 100644 debian/libreoffice-l10n-ru.maintscript create mode 100644 debian/libreoffice-l10n-rw.maintscript create mode 100644 debian/libreoffice-l10n-si.maintscript create mode 100644 debian/libreoffice-l10n-sk.maintscript create mode 100644 debian/libreoffice-l10n-sl.maintscript create mode 100644 debian/libreoffice-l10n-sr.maintscript create mode 100644 debian/libreoffice-l10n-ss.maintscript create mode 100644 debian/libreoffice-l10n-st.maintscript create mode 100644 debian/libreoffice-l10n-sv.maintscript create mode 100644 debian/libreoffice-l10n-ta.maintscript create mode 100644 debian/libreoffice-l10n-te.maintscript create mode 100644 debian/libreoffice-l10n-tg.maintscript create mode 100644 debian/libreoffice-l10n-th.maintscript create mode 100644 debian/libreoffice-l10n-tn.maintscript create mode 100644 debian/libreoffice-l10n-tr.maintscript create mode 100644 debian/libreoffice-l10n-ts.maintscript create mode 100644 debian/libreoffice-l10n-ug.maintscript create mode 100644 debian/libreoffice-l10n-uk.maintscript create mode 100644 debian/libreoffice-l10n-uz.maintscript create mode 100644 debian/libreoffice-l10n-ve.maintscript create mode 100644 debian/libreoffice-l10n-vi.maintscript create mode 100644 debian/libreoffice-l10n-xh.maintscript create mode 100644 debian/libreoffice-l10n-za.lintian-overrides create mode 100644 debian/libreoffice-l10n-za.maintscript create mode 100644 debian/libreoffice-l10n-zh-cn.maintscript create mode 100644 debian/libreoffice-l10n-zh-tw.maintscript create mode 100644 debian/libreoffice-l10n-zu.maintscript create mode 100644 debian/libreoffice-l10n.ucf.in create mode 100644 debian/libreoffice-librelogo.ucf create mode 100644 debian/libreoffice-math-nogui.bug-control create mode 100644 debian/libreoffice-math-nogui.mime create mode 100644 debian/libreoffice-math-nogui.ucf create mode 100644 debian/libreoffice-math.bug-control create mode 100644 debian/libreoffice-math.lintian-overrides create mode 100644 debian/libreoffice-math.maintscript create mode 100644 debian/libreoffice-math.manpages create mode 100644 debian/libreoffice-math.mime create mode 100644 debian/libreoffice-math.ucf create mode 100644 debian/libreoffice-mysql-connector.maintscript create mode 100755 debian/libreoffice-nlpsolver.bug-script.in create mode 100644 debian/libreoffice-nlpsolver.lintian-overrides create mode 100644 debian/libreoffice-officebean.maintscript create mode 100644 debian/libreoffice-plasma.maintscript create mode 100644 debian/libreoffice-qt5.maintscript create mode 100644 debian/libreoffice-report-builder-bin.maintscript create mode 100644 debian/libreoffice-report-builder.bug-control create mode 100644 debian/libreoffice-report-builder.maintscript create mode 100644 debian/libreoffice-report-builder.ucf create mode 100644 debian/libreoffice-script-provider-bsh.maintscript create mode 100644 debian/libreoffice-script-provider-js.maintscript create mode 100644 debian/libreoffice-script-provider-python.bug-control create mode 100644 debian/libreoffice-script-provider-python.maintscript create mode 100644 debian/libreoffice-sdbc-firebird.NEWS create mode 100644 debian/libreoffice-sdbc-firebird.maintscript create mode 100644 debian/libreoffice-sdbc-hsqldb.maintscript create mode 100644 debian/libreoffice-sdbc-mysql.maintscript create mode 100644 debian/libreoffice-sdbc-postgresql.maintscript create mode 100644 debian/libreoffice-sdbc-postgresql.ucf create mode 100644 debian/libreoffice-style-breeze.maintscript create mode 100644 debian/libreoffice-style-colibre.maintscript create mode 100644 debian/libreoffice-style-elementary.maintscript create mode 100644 debian/libreoffice-style-karasa-jaga.maintscript create mode 100644 debian/libreoffice-style-sifr.maintscript create mode 100644 debian/libreoffice-style-tango.maintscript create mode 100644 debian/libreoffice-subsequentcheckbase.maintscript create mode 100755 debian/libreoffice-wiki-publisher.bug-script.in create mode 100644 debian/libreoffice-wiki-publisher.lintian-overrides create mode 100644 debian/libreoffice-writer-nogui.bug-control create mode 100644 debian/libreoffice-writer-nogui.mime create mode 100644 debian/libreoffice-writer-nogui.ucf create mode 100644 debian/libreoffice-writer.bug-control create mode 100644 debian/libreoffice-writer.lintian-overrides create mode 100644 debian/libreoffice-writer.maintscript create mode 100644 debian/libreoffice-writer.manpages create mode 100644 debian/libreoffice-writer.mime create mode 100644 debian/libreoffice-writer.ucf create mode 100644 debian/libreoffice.bug-control create mode 100644 debian/libreofficekit-data.maintscript create mode 100644 debian/libreofficekit-dev.docs create mode 100644 debian/libridl-java.lintian-overrides create mode 100644 debian/libridl-java.poms create mode 100644 debian/libuno-cppu3.symbols create mode 100644 debian/libuno-cppuhelpergcc3-3.lintian-overrides create mode 100644 debian/libuno-cppuhelpergcc3-3.symbols create mode 100644 debian/libuno-purpenvhelpergcc3-3.symbols create mode 100644 debian/libuno-sal3.symbols create mode 100644 debian/libuno-salhelpergcc3-3.symbols create mode 100644 debian/libunoil-java.lintian-overrides create mode 100644 debian/libunoil-java.poms create mode 100644 debian/libunoloader-java.poms create mode 100644 debian/patches/0001-CVE-2022-26305-compare-authors-using-Thumbprint.patch create mode 100644 debian/patches/0002-CVE-2022-26307-make-hash-encoding-match-decoding.patch create mode 100644 debian/patches/0003-CVE-2022-26306-add-Initialization-Vectors-to-passwor.patch create mode 100644 debian/patches/0004-CVE-2022-2630-6-7-add-infobar-to-prompt-to-refresh-t.patch create mode 100644 debian/patches/ZDI-CAN-17859.diff create mode 100644 debian/patches/add-access2base-doc.diff create mode 100644 debian/patches/apparmor-allow-java.security.diff create mode 100644 debian/patches/apparmor-cleanups.diff create mode 100644 debian/patches/apparmor-complain.diff create mode 100644 debian/patches/apparmor-mesa.diff create mode 100644 debian/patches/apparmor-opencl.diff create mode 100644 debian/patches/apparmor-updates.diff create mode 100644 debian/patches/appstream-ignore-startcenter.diff create mode 100644 debian/patches/b0404f80577de9ff69e58390c6f6ef949fdb0139.patch create mode 100644 debian/patches/bash-completion-DRAWDOCS-pdf.diff create mode 100644 debian/patches/bigendian.diff create mode 100644 debian/patches/build-against-shared-lpsolve.diff create mode 100644 debian/patches/cppunit-optional.diff create mode 100644 debian/patches/debian-debug.diff create mode 100644 debian/patches/debian-hardened-buildflags-CPPFLAGS.diff create mode 100644 debian/patches/debian-hardened-buildflags-no-LO-fstack-protector-strong.diff create mode 100644 debian/patches/debian-opt.diff create mode 100644 debian/patches/default-to-CertificateValidity::INVALID.diff create mode 100644 debian/patches/disable-flaky-tests.diff create mode 100644 debian/patches/disable-java-in-odk-build-examples-on-zero-vm.diff create mode 100644 debian/patches/disable-shortcuts_tab_navigation-uitest.diff create mode 100644 debian/patches/disable-unused-test-programs.diff create mode 100644 debian/patches/disableClassPathURLCheck.diff create mode 100644 debian/patches/do-not-hide-test-output.diff create mode 100644 debian/patches/dont-touch-urd.diff create mode 100644 debian/patches/fix-bluez-external.diff create mode 100644 debian/patches/fix-e_book_client_connect_direct_sync-sig.diff create mode 100644 debian/patches/fix-flaky-bridgetest.diff create mode 100644 debian/patches/fix-internal-hsqldb-build.diff create mode 100644 debian/patches/fix-lo-xlate-lang-nb.diff create mode 100644 debian/patches/fix-system-lpsolve-build.diff create mode 100644 debian/patches/fix-uicheck-tests-on-i386.patch create mode 100644 debian/patches/help-msg-add-package-info.diff create mode 100644 debian/patches/hide-math-desktop-file.patch create mode 100644 debian/patches/hppa-is-32bit.diff create mode 100644 debian/patches/hrk-euro.diff create mode 100644 debian/patches/install-fixes.diff create mode 100644 debian/patches/javadoc-optional.diff create mode 100644 debian/patches/jdbc-driver-classpaths.diff create mode 100644 debian/patches/jurt-soffice-location.diff create mode 100644 debian/patches/liborcus-0.16.diff create mode 100644 debian/patches/make-package-modules-not-suck.diff create mode 100644 debian/patches/mediwiki-oor-replace.diff create mode 100644 debian/patches/mention-java-common-package.diff create mode 100644 debian/patches/no-check-if-root.diff create mode 100644 debian/patches/no-opencl-per-default.diff create mode 100644 debian/patches/no-openssl.diff create mode 100644 debian/patches/no-packagekit-per-default.diff create mode 100644 debian/patches/pdfium-m68k.diff create mode 100644 debian/patches/reportdesign-mention-package.diff create mode 100644 debian/patches/sc-opengl-optional.diff create mode 100644 debian/patches/search-usr-share-for-images.diff create mode 100644 debian/patches/sensible-lomua.diff create mode 100644 debian/patches/series create mode 100644 debian/patches/split-evoab.diff create mode 100644 debian/patches/system-officeotron-and-odfvalidator.diff create mode 100644 debian/patches/unowinreg-static-libgcc.diff create mode 100644 debian/patches/use-mariadb-java-instead-of-mysql-java.diff create mode 100644 debian/patches/xmlsecurity-XSecParser-confused-about-multiple-timestamps.diff create mode 100644 debian/patches/xmlsecurity-ignore-elements-in-ds:Object-that-arent-signed.diff create mode 100644 debian/patches/xmlsecurity-improve-handling-of-multiple-X509Data-elements.diff create mode 100644 debian/patches/xmlsecurity-replace-XSecParser-implementation.diff create mode 100644 debian/python3-access2base.links create mode 100644 debian/python3-uno.NEWS create mode 100644 debian/python3-uno.ucf create mode 100755 debian/rules create mode 100755 debian/scripts/fix_component_tarballs.sh create mode 100755 debian/scripts/get_libebook_dep.sh create mode 100755 debian/scripts/gid2pkgdirs.sh create mode 100755 debian/scripts/joinctrl.py create mode 100755 debian/scripts/locale-gen create mode 100755 debian/scripts/move-if-change create mode 100755 debian/scripts/stat_pos.sh create mode 100644 debian/shell-lib-extensions.sh create mode 100644 debian/shell-lib-lool.sh create mode 100644 debian/shlibs.override.icu create mode 100644 debian/shlibs.override.libc create mode 100644 debian/shlibs.override.libcmis create mode 100644 debian/shlibs.override.libetonyek create mode 100644 debian/shlibs.override.liblangtag create mode 100644 debian/shlibs.override.libmwaw create mode 100644 debian/shlibs.override.libodfgen create mode 100644 debian/shlibs.override.librevenge create mode 100644 debian/shlibs.override.libstaroffice create mode 100644 debian/shlibs.override.libvisio create mode 100644 debian/shlibs.override.libwpd create mode 100644 debian/shlibs.override.libwpg create mode 100644 debian/shlibs.override.libwps create mode 100644 debian/shlibs.override.orcus create mode 100644 debian/soffice.sh create mode 100644 debian/source/format create mode 100644 debian/source/include-binaries create mode 100644 debian/source/lintian-overrides create mode 100644 debian/templates/debian-presentation-background.xcf create mode 100644 debian/templates/debian-presentation.otp create mode 100644 debian/templates/soffice-template.desktop.in create mode 100755 debian/tests/access2base-import create mode 100644 debian/tests/control create mode 100644 debian/tests/control.in create mode 100755 debian/tests/junit create mode 100755 debian/tests/odk-build-examples create mode 100755 debian/tests/odk-build-examples-java create mode 100644 debian/tests/patches/disable-db-tests.diff create mode 100644 debian/tests/patches/java-subsequentcheck-standalone.diff create mode 100644 debian/tests/patches/odk-build-examples-standalone.diff create mode 100644 debian/tests/patches/smoketest-disable-extension-tests.diff create mode 100644 debian/tests/patches/smoketest-standalone.diff create mode 100644 debian/tests/patches/testtools-standalone.diff create mode 100644 debian/tests/patches/uicheck-standalone.diff create mode 100755 debian/tests/pyuno-import create mode 100755 debian/tests/smoketest create mode 100755 debian/tests/test-extension create mode 100755 debian/tests/test-extension-shared create mode 100755 debian/tests/uicheck-cui create mode 100755 debian/tests/uicheck-sc create mode 100755 debian/tests/uicheck-sd create mode 100755 debian/tests/uicheck-sw create mode 100755 debian/tests/uicheck-uitest create mode 100755 debian/tests/uicheck-writerperfect create mode 100755 debian/tests/uno create mode 100755 debian/tests/uno-import create mode 100644 debian/upstream/metadata create mode 100644 debian/upstream/signing-key.asc create mode 100644 debian/ure.bug-script.in create mode 100644 debian/ure.lintian-overrides create mode 100644 debian/vars.alpha create mode 100644 debian/vars.amd64 create mode 100644 debian/vars.arm create mode 100644 debian/vars.arm64 create mode 100644 debian/vars.armel create mode 100644 debian/vars.armhf create mode 100644 debian/vars.hppa create mode 100644 debian/vars.i386 create mode 100644 debian/vars.ia64 create mode 100644 debian/vars.kfreebsd-amd64 create mode 100644 debian/vars.kfreebsd-i386 create mode 100644 debian/vars.m68k create mode 100644 debian/vars.mips create mode 100644 debian/vars.mips64 create mode 100644 debian/vars.mips64el create mode 100644 debian/vars.mipsel create mode 100644 debian/vars.powerpc create mode 100644 debian/vars.powerpcspe create mode 100644 debian/vars.ppc64 create mode 100644 debian/vars.ppc64el create mode 100644 debian/vars.s390 create mode 100644 debian/vars.s390x create mode 100644 debian/vars.solaris-i386 create mode 100644 debian/vars.sparc create mode 100644 debian/vars.sparc64 create mode 100644 debian/watch create mode 100644 debian/xmerge-javadoc.in create mode 100644 tarballs/35c94d2df8893241173de1d16b6034c0-swingExSrc.zip create mode 100644 tarballs/798b2ffdc8bcfe7bca2cf92b62caf685-rhino1_5R5.zip create mode 100644 tarballs/a7983f859eafb2677d7ff386a023bc40-xsltml_2.1.2.zip create mode 100644 tarballs/dtoa-20180411.tgz create mode 100644 tarballs/pdfium-4306.tar.bz2 create mode 100644 tarballs/skia-m85-e684c6daef6bfb774a325a069eda1f76ca6ac26c.tar.xz diff --git a/debian/README b/debian/README new file mode 100644 index 00000000000..95a01507981 --- /dev/null +++ b/debian/README @@ -0,0 +1,83 @@ +LibreOffice build system +------------------------ + +Building the packages from source +================================= +Overview: + apt-get source libreoffice + apt-get build-dep libreoffice (to install build dependencies) + cd + debuild + +Changing the build behaviour with DEB_BUILD_OPTIONS +--------------------------------------------------- +These options are supported: + + debug - build with FULL debug symbols. Default is just to build + with SMALL ones since the deb otherwise gets too big + ((>400M, ca. 1GB I-S)) + + ccache - enable the use of ccache during the build. This is highly + recommended if you plan on building the package more than + once, or doing any development on the packages. Be aware + that you need EXTRAPACKAGES="ccache" in /etc/pbuilderrc + when trying to build libreoffice with ccache in + $DEB_BUILD_OPTIONS under pbuilder (this has no effect + on speed, hough because the cache does not persist in + pbuilder) + + parallel= + - enable n projects to be built in parallel. + The log output can get a little confusing, and some projects + may fail still. You need to remove config.status if you + change this value after interrupting a build. + + lang= + - Build only the specified language + + nocheck + - disable run of tests when enabled in rules + + +The targets that are built during the package build +--------------------------------------------------- + +- targets run during the package build - + +unpack - Does prerequisites for the build: packing, unpacking etc. + +build - as the name says + +install - Copy files from debian/tmp/pkg into the correct locations + for the final package layout in debian/libreoffice* + where we need to do that here because it affects arch-dep + and arch-indep stuff and therefore cannot be done in + install-arch / install-indep. + +install-arch - installs arch-dependent stuff into the arch-dep. packages +install-indep - " "-independent " " " "-indep. packages + +langpackgs - Installs the language packgs +helppkgs - Installs the help packages + +maintscripts - Generates the maintainer scripts + +get-orig-source - gets original source tarballs and unpacks them + GIT_BASEURL can be set to a local mirror + GIT_BRANCH is the branch to clone from the repos + GIT_TAG is tag that should be packed + GIT_BRANCH and GIT_TAG can both be master + +Building the package from git master +==================================== +To do a build from git master, do: + mkdir libreoffice-git + cd libreoffice-git + git clone https://salsa.debian.org/libreoffice-team/libreoffice/libreoffice.git debian + ./debian/rules unpack GIT_BRANCH=master GIT_TAG=master SOURCE_TARBALLS=n + dpkg-buildpackage + +Build system file layout +======================== +debian/scripts: + Directory containing various debian-specific build-related scripts. diff --git a/debian/README.Debian b/debian/README.Debian new file mode 100644 index 00000000000..1493746d015 --- /dev/null +++ b/debian/README.Debian @@ -0,0 +1,307 @@ + Readme for libreoffice package for Debian + -------------------------------------------- + +Contents +======== +Introduction +Quick start +Printer setup + Native CUPS support + Non-CUPS systems +Language support + Spellcheck dictionaries, Hyphenation patterns and Thesauri + Help packages +Display and crashing problems + X server crashes +Font problems + Why are the menu fonts smaller than in older versions? + Changing the default user interface font typeface for non-KDE/Gnome desktops +Disabling the splash screen +AppArmor problems +More information about LibreOffice in Debian + + +Introduction +============ +Welcome to the LibreOffice packages for the Debian distribution. These +packages are of the release of LibreOffice with the following +modifications: + + * Packaged as libreoffice-core (architecture-dependent core files), + libreoffice-common (architecture-independent common files), + libreoffice-{calc,writer,draw,impress,base} (the LibreOffice modules) + libreoffice-l10n- and libreoffice-help- and + other subpackages (-filters-* for lesser used filters, -gtk/-gnome/-kde, + ttf-opensymbol for the OpenSymbol font, ...). + + * Integration with other Debian packages: + - Global desktop integration for all users for KDE and Gnome desktops. + Menu entries for all window managers that support the Debian 'menu' + package. + + * Some extra features not yet present in official releases: + - Many of the patches included in the Ximian edition + + * Extra documentation - this README and man pages. + + +Quick start +=========== + +To start using LibreOffice, execute the command + + libreoffice + +as the user which you wish to start LibreOffice as. This will create the +necessary user files in ~/.libreoffice/3 for you. Alternatively, you +can start LibreOffice from the menus, if you have the menu package +installed/use KDE or GNOME. + +Printing +======== + +Printing on CUPS systems +------------------------ +The Debian packages include native CUPS support from version 1.1.1-3. This +is standard in all OpenOffice.org versions since 2.0. +When LibreOffice detects a CUPS system, it will download printer settings for +all CUPS queues, and these can be set from within the printer properties dialog. + +If you wish to add additional filters or print commands, you can add them +using 'spadmin'. Note that the 'Add a printer' option is disabled - you +should add printers using your favourite CUPS frontend. + +When creating a new document, LibreOffice will use the default paper size of +your default CUPS printer queue. If your new documents have the wrong paper +size, please check the configuration of your printer. + +Non-CUPS systems (lpr, lprng, SAL_DISABLE_CUPS=1) +--------------------------------- +There is a tool supplied with LibreOffice for setting up printers. You can +execute this with the command + + /usr/lib/openoffice/program/spadmin + +To change the page size and other default settings on non-CUPS systems, +modify /etc/openoffice/psprint.conf. The settings are documented in there. + +Language support +================ +You can get foreign language support by installing the +libreoffice-l10n- package for your language. You will also need the +'locales' (or belocs-locales-data for some locales, alternatively locales-all +if you want all locales) package installed. +The user interface language is selected according to your locale(1) settings. + +To change the user interface language for all users, run + + dpkg-reconfigure locales + +[ This is not needed when you install locales-all ] + +To change the language for just one user, you must arrange for the LC_MESSAGES +or LANG environment variable to be set. You can list all available locales +with the command 'locale -a'. +For example, to run LibreOffice in German from the command line: + + LANG=de_DE libreoffice + +Spellcheck dictionaries, Hyphenation patterns and Thesauri +---------------------------------------------------------- +Currently, there are dictionaries available for Afrikaans, Arabic, Armenian, +Bulgarian, Catalan, Croatian, Czech, Danish, Dutch, English (AUS/GB/US), +Esperanto, Estonian, Farsi, Finnish, French, Galician, German (DE/CH/AT), +Greek, Hebrew, Hungarian, Irish (Gaeilge), Italian, Kurdish, Latvian, +Lithuanian, Manx Gaelic, Norwegian Bokmal, Norwegian Nynorsk, Polish, +Portuguese, Portuguese (Brazilian), Russian, Scots Gaelic, Slovak, Slovenian, +Spanish, Swahili, Swedish, Thai, Ukrainian and Uzbek. +Dictionaries are packaged as myspell- (or, for newer ones improved +for hunspell hunspell-). + +Currently, there are thesauri available for Czech, English (AUS/GB/US), +German (DE/CH), Italian, Polish and Slovak. +Thesauri are packaged as mythes- + +Currently, there are hyphenation patterns available for English (USA), +Croatian, Estonian, German, Hungarian, Italian, Polish, Slovenian and +Lithuanian. +Hyphenation patterns are packaged as hyphen-. + +Help packages +------------- +Currently, there are localized help packages available for +Bulgarian, Chinese, Czech, Danish, Dutch, English (GB), English (USA), +Estonian, French, Galician, German, Hungarian, Italian, Japanese, Khmer, +Macedonian, Polish, Portuguese (Brazil), Russian, Slovakian, Slovenian and +Spanish and Swedish. +They are packaged as libreoffice-help-. + +Problems +================================ + +Here are some problems that have been reported with this version. If you do +not see your problem here, please check for open bug reports: + + http://bugs.debian.org/debian-openoffice@lists.debian.org + +1. If you are using NFS mounted file systems, you should make sure that locking +is functioning: + + 'Make sure NFS lockd/statd is running on the client, or mount the NFS export + with the 'nolock' option. + + If /usr gets mounted from an initrd, check 'ps' output once the system is + fully booted to ensure that you see a [lockd] kernel process, or an + 'rpc.lockd' / 'rpc.statd' userspace process. + + If not, just issue your mount command again (no need to even -o remount it + seems!) and run /etc/init.d/nfs-common restart.' (Thanks to Gavin Hamill) + + See this mailing list thread for more information: + http://lists.debian.org/debian-openoffice/2004/debian-openoffice-200402/msg00223.html + +X server crash with Matrox cards +-------------------------------- +If your X server is using the mga driver, you may find that your X server +crashes. You can work around this problem by adding this line to the mga +Device section: + + Option "XaaNoScreenToScreenColorExpandFill" + +There is a bug already open against xserver-xfree86 for this problem. Thanks +to Philip Armstrong for this information. + +LibreOffice crash with nVidia cards +-------------------------------------- +It seems that LibreOffice can trigger some obscure bugs in the X server +drivers for Nvidia cards too, especially if you have more than one processor. +Try updating your drivers to the latest version. + +Moreover LibreOffice may hang and takes X with it when RenderAccel +is enabled when using the proprietary nVidia Drivers. Disabling this option +helps then. + +Font problems +============= + +Why are the menu fonts smaller than in older versions? +------------------------------------------------------ +This is caused by a change in the way LibreOfffice interprets your X server DPI +setting. +This setting, when correctly configured, means that software can display text +at its true size on the display. + +The official OpenOffice.org version assumes that anyone who has their X server +configured with a DPI of less than 96 has not actually configured it at all, +and sets it back to 96. Unfortunately, this has the side effect that +displays with a lower DPI setting, such as some LCD laptop displays, cannot +display the page at its true size. + +So you can fix this by correctly setting the DPI for your X server. Gnome +users will find that it is set to 96 DPI by default; others may need to edit +their X server configuration. + +The best way to get the correct DPI setting is to add a 'DisplaySize' entry to +the Monitor section. From the XF86Config-4 man page: + + DisplaySize width height + This optional entry gives the width and height, in millimetres, of the + picture area of the monitor. If given this is used to calculate the + horizontal and vertical pitch (DPI) of the screen. + +If you set this value correctly, X will calculate and use the correct DPI +setting, even if you use several different display resolutions. + +From Nikita V. Youshchenko : + +- Many display manager configurations pass the option "-dpi 100" to the X + server by default, overriding any autodetected DPI. This has to be removed + for DisplaySize to work. The file that you need to edit varies depending on + the way your X server is started: + xdm: /etc/X11/xdm/Xservers + kdm: /etc/kde3/kdm/Xservers + gdm: /etc/gdm/gdm.conf + startx: /etc/X11/xinit/xserverrc + +- Gnome's gconf overrides the autodetected DPI, by setting Xft.dpi to a value + entered in configuration dialog, 96 by default. I don't know what is + the clean fix for this. Perhaps it should be fixed on the Gnome side. + +From Juergen Kreileder :> + +- Note that with most recent graphics cards and monitors XFree86 is able to + get the monitor size (and thus the correct dpi value) through ddc. + (**) NVIDIA(0): Validated modes for display device DFP-0: + (**) NVIDIA(0): Default mode "1600x1200": 189.0 MHz, 87.5 kHz, 70.0 Hz + (II) NVIDIA(0): Virtual screen size determined to be 1600 x 1200 + (--) NVIDIA(0): Display dimensions: (410, 310) mm + (--) NVIDIA(0): DPI set to (99, 98) + (That's with the proprietary NVIDIA drivers but other XFree86 drivers have + that support too.) + +If you use KDE or Gnome, LibreOffice will use the same font face and size as +your desktop environment. If you use another window manager, you can either +let it pick a default font itself, or change the font to be used (see next +section), or set the OOO_FORCE_DESKTOP environment variable to +kde (for kde3)/kde4 or gnome, to use KDE or Gnome settings respectively. + +Changing the default user interface font typeface for non-KDE/Gnome desktops +---------------------------------------------------------------------------- +If you do not want to use KDE or Gnome settings and want to change font sizes +within LibreOffice, you can configure the user interface font as follows: + +- Font size - + +You can change the font scaling using the user interface: + + Tools Menu -> Options -> View -> Scale + +- Font typeface - + +You can change the default font typeface by replacing it with a different font +installed on your system. This can be done using the font replacement function. +Choose Tools - Options - LibreOffice - Font Replacement to access this +function. + +To change the font of the LibreOffice user interface, you have to replace +the default font "Andale Sans UI" with another font and mark the "always" +setting for this replacement. "Andale Sans UI" is not selectable and has to be +typed in. The replacement font has to be a font which supports the requested +locale ( e.g for Korean language the replacement font has to be a font +including Korean characters). + +Refer to the LibreOffice Help for a detailed explanation of the font +replacement dialog. + +Disabling the splash screen +=========================== +If you don't like the splash screen staying in front of other windows while +LibreOffice is loading, you can disable it by editing +/etc/openoffice/sofficerc. Change Logo=1 to Logo=0. + +AppArmor problems +================= + +LibreOffice in Debian ships with AppArmor profiles: + + /etc/apparmor.d/usr.lib.libreoffice.* + +To debug issues with these AppArmor profiles, see: + + https://wiki.debian.org/AppArmor/Debug + +If you are using custom settings such as a custom env:UserInstallation +directory, you may need to adjust them to match your local setup. +In this example, you would need to add your custom +env:UserInstallation to @{libo_user_dirs} in the +usr.lib.libreoffice.program.soffice.bin profile. + +More information about LibreOffice in Debian +=============================================== +Please read the official README.gz (in the same directory as this file), too. + +If you have questions, either post to our the mailing list: + + http://lists.debian.org/debian-openoffice + +The Debian LibreOffice team diff --git a/debian/README.Debian-source b/debian/README.Debian-source new file mode 100644 index 00000000000..7b9f523b2fd --- /dev/null +++ b/debian/README.Debian-source @@ -0,0 +1,82 @@ +Package directory modes +======================= +The packages can be built directly from a set of git checkouts (vcs mode), +or from a set of release tarballs (tarball mode). + +Vcs mode is useful if you want to work on libreoffice during the development +cycle. You can check out the latest sources and track them while you make +changes. + +Tarball mode is used to prepare packages of official libreoffice releases +from the tarballs created by upstream. + +Source package creation steps for tarball mode +============================================== +The .orig.tar.gz consists of the (separate) source tarballs available +from The Document Foundation from +http://download.documentfoundation.org/libreoffice/src/ + +or base on an old version and add/remove the files manually and/or symlink +to the old version if this didn't change - see git diff of download.lst. This +is even better given we probably want to add only needed stuff there, and not +all tarballs (most of those we don't use) + +See the "Format: 3.0 (quilt)" section dpkg-source(1) for more details. + +Package directory layout - vcs mode +=================================== + +In vcs mode we are working directly from checkouts of the libreoffice sources. + +We pull in sources to these places: + + "top" directory - checkout of LO's "core" repo + debian - git packaging repository from pkg-openoffice project on alioth + helpcontent2 - checkout of LO's "help" repo (git submodule) + translations - checkout of LO's "translations" repo (git submodule) + tarballs - see above in tarball mode + +$ git clone git://gerrit.libreoffice.org/core +$ cd core +$ git submodule init + +(maybe remove dictionaries again, see .git/config, we don't need it here.) + +./g pull -r (git pull -r, but also does the necessary steps for the submodules) + +For tarballs/, see above + diff --git a/debian/README.qa b/debian/README.qa new file mode 100644 index 00000000000..3da75a9fea6 --- /dev/null +++ b/debian/README.qa @@ -0,0 +1,59 @@ +LibreOffice QA Tools + +smoketest +========= + +smoketest executes a set of macros that create a minimal document in +each of LibreOffice's applications, tests cut&paste and +saving/loading in various formats. + +Invoke it as oosmoketest. + +This program manipulates the LibreOffice user configuration, USE IT +WITH A DEDICATED USER ACCOUNT if you value your settings. + +qadevOOo +======== + +qadevOOo is a framework for executing tests for the LibreOffice +API. It is documented at +http://qa.openoffice.org/qadevOOo_doc/user-guide.html + +Predefined properties files exist in /usr/lib/openoffice/qadevOOo. + +Invoke it like e.g: + + ootestapi -ini /usr/lib/openoffice/qadevOOo/java.props -o sd.SdMasterPage + +That properties files specify AppExecutionCommand, i.e. an office will +be started if necessary. Some tests, however seem to work better if +the office was started manually, as written in the user guide. + + /usr/lib/openoffice/program/soffice "-accept=socket,host=localhost,port=8100;urp;" + +Use this invocation and not ooffice to prevent interference with the +quickstarter code. + +testtool +======== + +testtool is a framework for executing tests by automating actions in +LibreOffice's user interface. It is documented at +http://qa.openoffice.org/qatesttool/index.html + +Test scripts for testtool are available in the +libreoffice-qa-ui-tests package. + +Start it as ootesttool. + +If you're starting it for the first time, create a profile in +Extras->Settings where you specify the location of test scripts and +output path for log files. The default values point to the scripts +from the libreoffice-qa-ui-tests package, so simply giving a name +to the profile and pressing the "New" button is enough. + +Then open a test script and press F5 to start the test. + +Some test scripts may change your LibreOffice user +configuration. USE IT WITH A DEDICATED USER ACCOUNT if you value your +settings. diff --git a/debian/branding/progress.conf b/debian/branding/progress.conf new file mode 100644 index 00000000000..59ff72ce41d --- /dev/null +++ b/debian/branding/progress.conf @@ -0,0 +1 @@ +PROGRESSBARCOLOR=215,7,81 diff --git a/debian/bug-presubj b/debian/bug-presubj new file mode 100644 index 00000000000..602de78b9f7 --- /dev/null +++ b/debian/bug-presubj @@ -0,0 +1,60 @@ +Reporting a bug against LibreOffice +-------------------------------------- +I) Make sure it's a LibreOffice bug after all: #398923 and its friends for + example are not. + Set the Version: header right. If you found a bug in a specific version, + set that as version:, even if you in the meanwhile upgraded. If you are on + an up-to-date version and tried old versions and they have the bug, too, set + the Version: header to the earliest version you found it in (of course, if + versions inbetween don't have the bug use the version in which it reappeared + and sustained to the current version) + +II) Check on the BTS (http://bugs.debian.org/src:libreoffice) whether the + bug already is reported. Do *NOT* report a new one then. For judging whether + it's already reported, read *ALL* the bugs, think, try and use common sense. + +III) If you have crashes with a document, try another one. If only that or + similar docs causes problems please attach THIS (or a similar type one + causing it). Otherwise, don't file a bug, we can't look at it anyway. + +IV) Please attach more info if possible (see + https://wiki.documentfoundation.org/QA/BugReport/Debug_Information#GNU.2FLinux). + Install libreoffice-*-dbgsym or libreoffice-dbg before doing this (and maybe + the packages it Recommends and/or -dbgsym/-dbg of the libraries LO depends + on). + Please note that those *-dbgsym packages are not in the main archive; you + need to add the debug archive for that. + See https://wiki.debian.org/AutomaticDebugPackages + Please also read /usr/share/doc/libreoffice-common/README.gz for common + problems ("Problems During Program Startup") + If you have NFS/Samba/... file locking problems (i.e. files opened + read-only when they should be read-write), also see the "File Locking" + section in above file. + +V) If the bug is also in the version you can get from www.libreoffice.org, file + it there (see https://wiki.documentfoundation.org/QA/BugReport) in the first + place. If you really think this also should be a bug in the Debian BTS + (because it's (release-)critical or otherwise important) please file a bug + there too *BUT* note the TDF bug number in the bug or mark it forwarded + yourself if you can. Especially this is for feature requests. + If you tested other LibreOffice packages and the bug is (not) in version + foo from bar, mention that, too. + +VI) Only report bugs on completely up-to-date systems. Don't file bugs on a + obsolete version and neither on sid/testing systems really old. If bugs + got fixed in sid, it doesn't make sense to file them anymore. (Exception + is security bugs or really critical bugs which should be get fixed in + stable.) When you think a dependency is missing/wrong/too lax please be + *sure* that this is the case before reporting it. Most times it isn't. + Use common sense and the bug severities for judging here. When you think + you have an up-to-date system, check whether you really have one. + (And do a dist-upgrade, try to reproduce the bug again). + Also don't report bugs on broken mix systems unless you are sure about the + dependencies/conflicts (see above). + +VII) Please give as much info as possible (installed OOo packages, installed + extensions, "special" configs, additions, changes, whatever). Better too + much than too less. (See #396225 for example which was caused by an + unsupportable, non-free extension) + +Thanks. diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 0000000000000000000000000000000000000000..16a0f12c736822375aee25438d8abdfb859b0dff GIT binary patch literal 632739 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%0DsL>y`a2{ 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

|YIrh%cKLQE>L9J+3+uS6wexj5RVs{3-g-QCxG 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

3EF&=Dx z(SPgEuKEH+p{U5yTOtM}||1y8A&%kK|8c_I(8(NtHt z-Rn};j^ zCvo28lnL*^QSeQ{rhsivfAa#A77g2)kO<{_PBK%yS&Ob#e8*5MxxseX_-w6fG-_PF zXI6K)&HJ4mRq8wHYeOnA0(2MB337MT{x$#eK}WO9Zp-Bvij=fHH6E5qXruA*T@oqD zp&P-uLz;wv3B7i|-fE>wsx&1R~0vEP1N)iw*L3N7MIqo=j!! zj!$qENGGXuRKAK1^S^6x$Mv_3^Jz#XCcJ`PKT;{}h|aN12WKChZu>ueM%4es`ooWz zL#{~FqVf7Z%L=--PIk|Cin`FYYoaJq4VG@UGcnG}JBxj>%E#?O=6l2A=37fEaQ5!l z+9_`^9MJ$Q*WBU+Lrn`t*P^btVbB-dnyfYE00csvBnijFY5+bX$E-ooZXiM z!+o;+nnmpdg+H!<fNS8tjaV$o6pXWc;e{5bITCD`SQc- zJ+r0<71#cdisLWCgG6>ypWpKWUPLAIHP4e@Qb$s? zM(cO=FZY+T5BJNkLusrelY0MPvb0?Eo{$s7*O?X>K`(72An`wrZoIzv^ACTwB zUeWDrh@7k-aZn0NE-@-0;Yt5HD=lU6j32%D?55PLvSH3_{5#q?+4Ll;S#`nbA z&>gi0!qoC6{~Iilr=%Nc7yMG^+>5PY;2eA9e?S15W_{-1a#HiG&_QSC%#=5`nPwX` zVIMDO?+j_r_4~&$FZa>aJJPN#20Yx|VYnif)EN=rg~Onk;VstpHbtn#T|1%XD~p?V zMv|(e>4t6Qp^jt0yudk|>B zPcmn0&`LqA7Hi2sFUOxf3!T*2R=xkwzfb(Q5hB`$_PQF0S0jNlyk995@)9NwemcE5 zRfS`S!{P4R$KUNoB2+QVWy7X3qqn#pdFYPpNePa)THY~4MANaP5zPmczmQrfCJ049 zhp!!!eeaFR^MrTWr=U6IN%4)`_ir}gX!*9p^7h+ctUGxOTuzP~dp-)O%71rJ4R8V} zY0s;%WHen~)-M-#Q>18CtDs84!&U|MdQ)mm|F$C)OAoeBiVtn!CLHQ-NCl*s#Lu`eOD~-Ta3l<@53}KLh`VANMl<{3IEHYWy zxa*fD<+7sQdKyQdT+AOFUbiVi(xRCMVSxnFnY0qOzlo|i*T+Q8pBHho(d9q zq*3Z92@OISJ`;tI3dzUC=>Vt{060Ivgs6_On)aysPm!Oi&uhVR5RkW>5lFTmK`Th; zlV6a8GyXypTPREUxY!7KG63H&oIxG-s42QFzB%}>QW8ovCyCCF+J{3hiL(((G|s4Z z+K$&#Uo56%CbuqW%&eA&SbQfz6_RzJ4Z?`uw!Op6u4@CSfg{7_1QW~IyPEUZ?sXNz zYxAX!A@X_1z71BZ61F0kVNkk-2F$5fyF5@^Y>I&LHkur--J)W#f;HkIM!jkhu-ATzUX! z1ud2u-y=V=wGzn{_MM?X3uzG9XBl2`v)P!$m~S;VDJ8IVG`-6G_Yz{2p!n>zLwr_I zf^pw(#O$I^k|b&rmq#kOZd9Hcd4dI&8>gdw6m`L_OZG!X7NZ;hsP$0w8 zR3Z|aW$jK0QW8t;9FevcP^3;@P)lE$gM)U}E@o#%%2GL|;BSqWnjH&FsF}zVKp;tB zhJa=ti%&fIOdE~wQpc)KH$m!~<+bh10@c-nRz0;c#U|H8F*JWKqo#ioY|gb*7 ztda&}7mNywMK>I1>mZ%j9S*#EpWr;HKJTkfzmgkey6Wm2t*v+IF1n{{hj7gs|MW1v@pqb*Nk{sP%LKR}B=y+<0Fx5&`3eT0!l|>UvVhD{myN?nM!e-GV_NJBW^ZzI=J&{dsP{fIJI6xIc&%e z9)qwV>2XfBYKbC|j*YYV_vJ;EL&yfNStWmHP;vHDi;=Zt2%OZ{rllS98pkIy%!JX< z

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%0A7qlFKjQbOH$7*Nt4U*+ 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≪AUs_x>d4?MbADU-FU2E-0S~){ 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%0DX%G`A=y^YSnMy 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 literal 0 HcmV?d00001 diff --git a/debian/control.evolution.in b/debian/control.evolution.in new file mode 100644 index 00000000000..8b387cad9ef --- /dev/null +++ b/debian/control.evolution.in @@ -0,0 +1,17 @@ +Package: libreoffice-evolution +Architecture: %OOO_BASE_ARCHS% +Section: gnome +Depends: libreoffice-base, + libreoffice-common (>= 1:7.0.0~alpha~), + libreoffice-core (= ${binary:Version}), + ${libebook-dep}, + ${misc:Depends}, + ${shlibs:Depends} +Recommends: evolution +Description: office productivity suite -- Evolution addressbook support + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + This package allows LibreOffice to access Evolution address books. + You need to install evolution separately. + diff --git a/debian/control.firebird.in b/debian/control.firebird.in new file mode 100644 index 00000000000..89cc8b331c0 --- /dev/null +++ b/debian/control.firebird.in @@ -0,0 +1,12 @@ +Package: libreoffice-sdbc-firebird +Depends: libreoffice-core-nogui | libreoffice-core, ${shlibs:Depends}, ${misc:Depends}, ${firebird-engine-depends} +Architecture: %OOO_FIREBIRD_ARCHS% +Section: database +Enhances: libreoffice-base-drivers +Description: Firebird SDBC driver for LibreOffice + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + The Firebird SDBC Driver allows one to use the Firebird database from + LibreOffice without any wrapper layer such as ODBC or JDBC. + diff --git a/debian/control.fonts.in b/debian/control.fonts.in new file mode 100644 index 00000000000..f52165d404c --- /dev/null +++ b/debian/control.fonts.in @@ -0,0 +1,13 @@ +Package: fonts-opensymbol +Section: fonts +Architecture: all +Multi-Arch: foreign +Depends: ${misc:Depends} +Recommends: fontconfig +Replaces: ttf-opensymbol +Provides: ttf-opensymbol +Description: OpenSymbol TrueType font + This package contains the OpenSymbol TrueType font included in + LibreOffice. This font contains symbols (like fonts as Wingdings(tm)), + bullets (needed for bullets in LibreOffice) and non-latin character + diff --git a/debian/control.gtk3.in b/debian/control.gtk3.in new file mode 100644 index 00000000000..6dd26771630 --- /dev/null +++ b/debian/control.gtk3.in @@ -0,0 +1,49 @@ +Package: libreoffice-gtk3 +Architecture: %OOO_ARCHS% +Depends: libreoffice-core (= ${binary:Version}), + ${misc:Depends}, + ${shlibs:Depends} +Suggests: libreofficekit-data +Recommends: gstreamer1.0-gtk3 +Section: gnome +Enhances: libreoffice +Description: office productivity suite -- GTK+ 3 integration + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + This package contains the Gtk plugin for drawing LibreOffices widgets + with Gtk+ 3 and Gtk/GNOMEish print dialog when running under GNOME. + +Package: gir1.2-lokdocview-0.1 +Architecture: %OOO_ARCHS% +Section: introspection +Depends: ${gir:Depends}, ${misc:Depends}, liblibreofficekitgtk (= ${binary:Version}) +Description: GTK3 widget wrapping LibreOffice functionality - introspection + LOKDocView is the GTK3 widget that wraps the libreoffice functionality and + exposes a simple API for applications to use this widget. + . + This package contains the Introspection data. + +Package: liblibreofficekitgtk +Section: gnome +Architecture: %OOO_ARCHS% +Depends: ${shlibs:Depends}, ${misc:Depends}, libreofficekit-data +Replaces: libreoffice-gtk3 (<< 1:5.2.0~) +Breaks: libreoffice-gtk3 (<< 1:5.2.0~) +Recommends: libreoffice-gtk3 +Description: GTK3 widget wrapping LibreOffice functionality + This package contains a (basic) GTK+ document viewer widget (used + by e.g. LOKDocView) + +Package: libreofficekit-data +Architecture: all +Section: web +Depends: ${misc:Depends} +Recommends: gir1.2-lokdocview-0.1 +Description: common data for LOKDocView + LOKDocView is the GTK3 widget that wraps the libreoffice functionality and + exposes a simple API for applications to use this widget. + . + This package contains architecture-independent data (e.g. the selection + handlers). + diff --git a/debian/control.help.in b/debian/control.help.in new file mode 100644 index 00000000000..38403bcc786 --- /dev/null +++ b/debian/control.help.in @@ -0,0 +1,17 @@ +Package: libreoffice-help-@LCODE@ +Architecture: all +Section: doc +Recommends: libreoffice-core (>> ${base-version}) +Depends: libreoffice-l10n-@LCODE@, + libreoffice-common (>= 1:6.1.0~), + ${help-depends}, + ${misc:Depends} +Provides: libreoffice-help (= ${help-l10n-virtual-version}) +Replaces: libreoffice-help-common (<< 1:6.4.1~rc1) +Description: office productivity suite -- @LNAME@ help + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + This package contains the help of LibreOffice in + @LNAME@. + diff --git a/debian/control.in b/debian/control.in new file mode 100644 index 00000000000..7016fa26f25 --- /dev/null +++ b/debian/control.in @@ -0,0 +1,935 @@ +Source: libreoffice +Section: editors +Priority: optional +Maintainer: Debian LibreOffice Maintainers +Uploaders: Rene Engelhard , Chris Halls +Build-Depends: %BUILD_DEPS%, +Build-Depends-Indep: %BUILD_DEPS_INDEP% +Build-Conflicts: nvidia-glx-dev, + nvidia-glx-legacy-dev, + amd-libopencl1, + nvidia-libopencl1 +Standards-Version: 4.0.1 +Vcs-Git: https://salsa.debian.org/libreoffice-team/libreoffice/libreoffice.git +Vcs-Browser: https://salsa.debian.org/libreoffice-team/libreoffice/libreoffice +Bugs: @BUGS@ +Homepage: http://www.libreoffice.org + +Package: libreoffice +Architecture: %OOO_ARCHS% +Section: metapackages +Depends: libreoffice-base%OOO_NO_BASE_ARCHS%, + libreoffice-calc, + libreoffice-core (= ${binary:Version}), + libreoffice-draw, + libreoffice-impress, + libreoffice-math, + libreoffice-report-builder-bin%OOO_NO_REPORTBUILDER_ARCHS%, + libreoffice-writer, + ${misc:Depends}, + ${pyuno-depends} +Recommends: ${java-common-depends}, + fonts-sil-gentium-basic, + fonts-crosextra-caladea, + fonts-crosextra-carlito, + fonts-dejavu, + fonts-liberation, + fonts-liberation2, + fonts-linuxlibertine, + fonts-noto-core, + fonts-noto-extra, + fonts-noto-mono, + fonts-noto-ui-core, + libreoffice-script-provider-bsh, + libreoffice-script-provider-js, + libreoffice-script-provider-python, + libreoffice-nlpsolver, + libreoffice-report-builder%OOO_NO_REPORTBUILDER_ARCHS%, + libreoffice-wiki-publisher, + libreoffice-sdbc-mysql, + libreoffice-sdbc-postgresql +Suggests: cups-bsd, + ghostscript, + hunspell-dictionary, + hyphen-hyphenation-patterns, + firefox-esr | thunderbird | firefox, + imagemagick | graphicsmagick-imagemagick-compat, + libgl1, + libreoffice-grammarcheck, + libreoffice-help (= ${help-l10n-virtual-version}), + libreoffice-l10n (= ${help-l10n-virtual-version}), + ${libsane-suggests}, + libxrender1, + myspell-dictionary, + mythes-thesaurus, + openclipart2-libreoffice | openclipart-libreoffice, + pstoedit, + unixodbc, + gnupg, + gpa, + ${gstreamer-plugins-suggests}, + ${java-runtime-depends}, + ${ooo-officebean-dep}, + libreoffice-librelogo, + %LO-DESKTOP-INTEGRATION% +Conflicts: libreoffice-dev (<= 1:5.0.3~rc1-2), libreoffice-dev-doc (<= 1:5.0.3~rc1-2) +Description: office productivity suite (metapackage) + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + This metapackage installs all components of libreoffice: + * libreoffice-writer: Word processor + * libreoffice-calc: Spreadsheet + * libreoffice-impress: Presentation + * libreoffice-draw: Drawing + * libreoffice-base: Database + * libreoffice-math: Equation editor + It also recommends additional packages (e.g. fonts) in order to match an + upstream LibreOffice install as closely as possible. + . + You can extend the functionality of LibreOffice by installing these + packages: + * hunspell-*/myspell-*: Hunspell/Myspell dictionaries + for use with LibreOffice + * libreoffice-l10n-*: UI interface translation + * libreoffice-help-*: User help + * mythes-*: Thesauri for the use with LibreOffice + * hyphen-*: Hyphenation patterns for LibreOffice + * libreoffice-gtk(2|3): Gtk UI Plugin, GNOME File Picker support + * libreoffice-gnome: GIO backend + * unixodbc: ODBC database support + * cups-bsd: Allows LibreOffice to detect your CUPS printer queues + automatically + * libsane: Use your sane-supported scanner with LibreOffice + * libxrender1: Speed up display by using Xrender library + * libgl1: OpenGL support + * openclipart-libreoffice: Open Clip Art Gallery with LibreOffice index + files + * firefox-esr | thunderbird | firefox: + Mozilla profile with Certificates needed for XML Security... + * openjdk-11-jre | openjdk-8-jre | java8-runtime: + Java Runtime Environment for use with LibreOffice + * pstoedit / imagemagick / ghostscript: helper tools for EPS + * gstreamer0.10-plugins-*: GStreamer plugins for use with LibreOffices + media backend + * libpaper-utils: papersize detection support via paperconf + +Package: libreoffice-nogui +Architecture: %OOO_NOGUI_ARCHS% +Section: metapackages +Depends: libreoffice-base-nogui%OOO_NO_BASE_ARCHS%, + libreoffice-calc-nogui, + libreoffice-core-nogui (= ${binary:Version}), + libreoffice-draw-nogui, + libreoffice-impress-nogui, + libreoffice-math-nogui, + libreoffice-report-builder-bin-nogui%OOO_NO_REPORTBUILDER_ARCHS%, + libreoffice-writer-nogui, + ${misc:Depends}, + ${pyuno-depends} +Recommends: ${java-common-depends}, + libreoffice-script-provider-bsh, + libreoffice-script-provider-js, + libreoffice-script-provider-python, + libreoffice-sdbc-mysql, + libreoffice-sdbc-postgresql +Suggests: ghostscript, + hunspell-dictionary, + hyphen-hyphenation-patterns, + imagemagick | graphicsmagick-imagemagick-compat, + libreoffice-grammarcheck, + myspell-dictionary, + mythes-thesaurus, + pstoedit, + unixodbc, + gnupg, + gpa, + ${java-runtime-depends} +Description: office productivity suite (metapackage, no GUI) + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + This metapackage installs all components of libreoffice: + * libreoffice-writer: Word processor + * libreoffice-calc: Spreadsheet + * libreoffice-impress: Presentation + * libreoffice-draw: Drawing + * libreoffice-base: Database + * libreoffice-math: Equation editor + . + WITHOUT GUI SUPPORT. + . + This package is intended mostly for scripting needs. + +Package: libreoffice-l10n-za +Section: metapackages +Architecture: all +Depends: libreoffice-l10n-af, + libreoffice-l10n-en-za, + libreoffice-l10n-nr, + libreoffice-l10n-nso, + libreoffice-l10n-ss, + libreoffice-l10n-st, + libreoffice-l10n-tn, + libreoffice-l10n-ts, + libreoffice-l10n-ve, + libreoffice-l10n-xh, + libreoffice-l10n-zu, + ${misc:Depends} +Description: office productivity suite -- South African language packages + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + This package is a metapackage installing l10n packages for all 11 South + African languages. + +Package: libreoffice-l10n-in +Section: metapackages +Architecture: all +Depends: libreoffice-l10n-as, + libreoffice-l10n-bn, + libreoffice-l10n-gu, + libreoffice-l10n-hi, + libreoffice-l10n-kn, + libreoffice-l10n-ml, + libreoffice-l10n-mr, + libreoffice-l10n-ne, + libreoffice-l10n-or, + libreoffice-l10n-pa-in, + libreoffice-l10n-ta, + libreoffice-l10n-te, + ${misc:Depends} +Recommends: fonts-indic +Description: office productivity suite -- Indic language packages + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + This package is a metapackage installing l10n packages for all available + indic languages. + +Package: libreoffice-core +Architecture: %OOO_ARCHS% +Depends: fontconfig, + fonts-opensymbol, + libreoffice-common (>> ${base-version}), + ure (>= 1:7.0.0~), + ${misc:Depends}, + ${shlibs:Depends} +Recommends: libpaper-utils, ${gstreamer-plugins-suggests} +Breaks: libreoffice-base (<< ${binary:Version}), + libreoffice-calc (<< ${binary:Version}), + libreoffice-dev (<< ${binary:Version}), + libreoffice-draw (<< ${binary:Version}), + libreoffice-evolution (<< ${binary:Version}), + libreoffice-gnome (<< ${binary:Version}), + libreoffice-gtk2 (<< ${binary:Version}), + libreoffice-gtk3 (<< ${binary:Version}), + libreoffice-impress (<< ${binary:Version}), + libreoffice-qt5 (<< ${binary:Version}), + libreoffice-kde4 (<< ${binary:Version}), + libreoffice-kde5 (<< ${binary:Version}), + libreoffice-kf5 (<< ${binary:Version}), + libreoffice-officebean (<< ${binary:Version}), + libreoffice-writer (<< ${binary:Version}), + browser-plugin-libreoffice, + libreoffice-pdfimport (<< 1:5.4~), + libreoffice-common (<< 1:5.4.1), + libreoffice-avmedia-backend-gstreamer (<< ${binary:Version}) +Conflicts: libreoffice-filter-binfilter, libreoffice-avmedia-backend-vlc, libreoffice-mysql-connector (<< 1:6.2.0~), libreoffice-core-nogui +# for bullseye, copied from libreoffice-common, see #985297 + , + libreoffice-base (<< 1:7.0.0~alpha~), + libreoffice-calc (<< 1:7.0.0~alpha~), + libreoffice-draw (<< 1:7.0.0~alpha~), + libreoffice-impress (<< 1:7.0.0~alpha~), + libreoffice-math (<< 1:7.0.0~alpha~), + libreoffice-report-builder (<< 1:7.0.0~alpha~), + libreoffice-writer (<< 1:7.0.0~alpha~), +Replaces: libreoffice-pdfimport (<< 1:5.4~), libreoffice-common (<< 1:6.3.0~rc1~), libreoffice-avmedia-backend-gstreamer, libreoffice-core-nogui +Description: office productivity suite -- arch-dependent files + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + This package contains the architecture-dependent core files of + LibreOffice. See the libreoffice package for more information. + +Package: libreoffice-core-nogui +Architecture: %OOO_NOGUI_ARCHS% +Depends: fontconfig, + fonts-opensymbol, + libreoffice-common (>> ${base-version}), + ure (>= 1:7.0.0~), + ${misc:Depends}, + ${shlibs:Depends} +Recommends: libpaper-utils +Breaks: libreoffice-base (<< ${binary:Version}), + libreoffice-calc, + libreoffice-dev (<< ${binary:Version}), + libreoffice-draw (<< ${binary:Version}), + libreoffice-evolution (<< ${binary:Version}), + libreoffice-gnome (<< ${binary:Version}), + libreoffice-gtk2, + libreoffice-gtk3, + libreoffice-impress (<< ${binary:Version}), + libreoffice-qt5, + libreoffice-kde4, + libreoffice-kde5, + libreoffice-kf5, + libreoffice-officebean (<< ${binary:Version}), + libreoffice-writer (<< ${binary:Version}), + browser-plugin-libreoffice, + libreoffice-pdfimport (<< 1:5.4~), + libreoffice-common (<< 1:5.4.1), + libreoffice-avmedia-backend-gstreamer (<< ${binary:Version}) +Conflicts: libreoffice-filter-binfilter, libreoffice-avmedia-backend-vlc, libreoffice-mysql-connector (<< 1:6.2.0~), libreoffice-core +Provides: libreoffice-bundled +Replaces: libreoffice-pdfimport (<< 1:5.4~), libreoffice-common (<< 1:6.3.0~rc1~), libreoffice-avmedia-backend-gstreamer, libreoffice-core +Description: office productivity suite -- arch-dependent files (no GUI variant) + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + This package contains the architecture-dependent core files of + LibreOffice without GUI support for server-based or commandline usage of + LibreOffice. + +Package: libreoffice-common +Architecture: all +Depends: libreoffice-style-colibre, ure, ${numbertext-data-recommends}, ${misc:Depends} +Suggests: libreoffice-style, +Recommends: ${pyuno-depends}, ${textcat-data-recommends}, xdg-utils, fonts-liberation2 | ttf-mscorefonts-installer +Conflicts: openoffice.org-unbundled, + broffice, + libreoffice-filter-mobiledev, + libreoffice-l10n-4.3, + libreoffice-l10n-4.4, + libreoffice-wiki-publisher (<< 1.2.0+LibO5.4.0~rc2), + libreoffice-base (<< 1:7.0.0~alpha~), + libreoffice-base-nogui (<< 1:7.0.0~alpha~), + libreoffice-calc (<< 1:7.0.0~alpha~), + libreoffice-calc-nogui (<< 1:7.0.0~alpha~), + libreoffice-draw (<< 1:7.0.0~alpha~), + libreoffice-draw-nogui (<< 1:7.0.0~alpha~), + libreoffice-evolution (<< 1:7.0.0~alpha~), + libreoffice-gnome (<< 1:7.0.0~alpha~), + libreoffice-impress (<< 1:7.0.0~alpha~), + libreoffice-impress-nogui (<< 1:7.0.0~alpha~), + libreoffice-l10n (<< 7.0), + libreoffice-librelogo (<< 1:7.0.0~alpha~), + libreoffice-math (<< 1:7.0.0~alpha~), + libreoffice-math-nogui (<< 1:7.0.0~alpha~), + libreoffice-sdbc-postgresql (<< 1:7.0.0~alpha~), + python3-uno (<< 1:7.0.0~alpha~), + libreoffice-report-builder (<< 1:7.0.0~alpha~), + libreoffice-writer (<< 1:7.0.0~alpha~), + libreoffice-writer-nogui (<< 1:7.0.0~alpha~) +Provides: libreoffice-l10n-en-us +Breaks: libreoffice-core (<< 1:${oover}~), + libreoffice-core (<< 1:6.4.2~rc1), + libreoffice-help-5.2, + libreoffice-help (<< 5.4), + libreoffice-l10n (<< 7.0), + libreoffice-librelogo (<< 1:7.0.0~alpha), + libreoffice-sdbc-postgresql (<< 1:7.0.0~alpha), + libreoffice-report-builder (<< 1:7.0.0~alpha), + libreoffice-evolution (<< 1:7.0.0~alpha), + libreoffice-gnome (<< 1:7.0.0~alpha), + python3-uno (<< 1:7.0.0~alpha), + libreoffice-core (>= 1:${next-oover}~), + libreoffice-style-andromeda (<< 1:${oover}~), + libreoffice-style-crystal (<< 1:${oover}~), + libreoffice-style-crystal (>= 1:${next-oover}~), + libreoffice-style-galaxy (<< 1:${oover}~), + libreoffice-style-galaxy (>= 1:${next-oover}~), + libreoffice-style-hicontrast (<< 1:${oover}~), + libreoffice-style-hicontrast (>= 1:${next-oover}~), + libreoffice-style-tango, + libreoffice-writer2latex (<< 1.0.2-9), + libreoffice-writer2xhtml (<< 1.0.2-9), + libreoffice-base (<< 1:6.4.0~beta1-2~), + openclipart-libreoffice (<= 1:0.18+dfsg-17) +Replaces: libreoffice-base (<< 1:6.4.0~beta1-2~), + libreoffice-pdfimport (<< 1:5.4~), + openclipart-libreoffice (<= 1:0.18+dfsg-17) +Description: office productivity suite -- arch-independent files + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + This package contains the architecture-independent files of + LibreOffice. + +Package: libreoffice-java-common +Architecture: all +Depends: libreoffice-common, liblibreoffice-java, libjuh-java, libridl-java, libjurt-java, libunoil-java, libunoloader-java, ${java:Depends}, ${misc:Depends} +Breaks: libunoil-java (<< 1:6.4.0~rc1-6) +Replaces: libunoil-java (<< 1:6.4.0~rc1-6) +Description: office productivity suite -- arch-independent Java support files + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + This package contains the architecture-independent files of + the Java support for LibreOffice (Java classes, scripts, config snippets). + +Package: libreoffice-help-common +Architecture: all +Depends: libreoffice-common, ${help-common-depends}, ${misc:Depends} +Breaks: libreoffice-common (<< 1:6.1.0~alpha1-1) +Replaces: libreoffice-common (<< 1:6.1.0~alpha1-1) +Description: office productivity suite -- common files for LibreOffice help + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + This package contains the common files (e.g. language-independent, media) files + for the LibreOffice Help. + +Package: libreoffice-writer +Architecture: %OOO_ARCHS% +Depends: libreoffice-base-core (= ${binary:Version})%OOO_NO_BASE_ARCHS%, + libreoffice-core (= ${binary:Version}), + libreoffice-common (>= 1:7.0.0~alpha~), + ${misc:Depends}, + ${shlibs:Depends} +Recommends: libreoffice-math, +Suggests: fonts-crosextra-caladea, + fonts-crosextra-carlito, + libreoffice-base, + ${java-common-depends}, + ${java-runtime-depends} +Replaces: libreoffice-common (<< 1:6.4.2~rc1~) +Breaks: libreoffice-common (<< 1:6.4.2~rc1~) +Description: office productivity suite -- word processor + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + This package contains the wordprocessor component for LibreOffice. + +Package: libreoffice-writer-nogui +Architecture: %OOO_NOGUI_ARCHS% +Depends: libreoffice-base-core (= ${binary:Version})%OOO_NO_BASE_ARCHS%, + libreoffice-core-nogui (= ${binary:Version}) | libreoffice-core (= ${binary:Version}), + libreoffice-common (>= 1:7.0.0~alpha~), + ${misc:Depends}, + ${shlibs:Depends} +Recommends: libreoffice-math-nogui, +Suggests: fonts-crosextra-caladea, + fonts-crosextra-carlito, + libreoffice-base, + ${java-common-depends}, + ${java-runtime-depends} +Replaces: libreoffice-common (<< 1:6.4.2~rc1~), libreoffice-writer +Breaks: libreoffice-common (<< 1:6.4.2~rc1~) +Conflicts: libreoffice-writer +Description: office productivity suite -- word processor (no GUI variant) + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + This package contains the wordprocessor component for LibreOffice. + +Package: libreoffice-calc +Architecture: %OOO_ARCHS% +Depends: libreoffice-base-core (= ${binary:Version})%OOO_NO_BASE_ARCHS%, + libreoffice-core (= ${binary:Version}), + libreoffice-common (>= 1:7.0.0~alpha~), + ${lpsolve-dep}, + ${misc:Depends}, + ${shlibs:Depends} +Suggests: ocl-icd-libopencl1 | mesa-opencl-icd | beignet-opencl-icd +Replaces: libreoffice-common (<< 1:6.4.2~rc1~) +Breaks: libreoffice-common (<< 1:6.4.2~rc1~) +Description: office productivity suite -- spreadsheet + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + This package contains the spreadsheet component for LibreOffice. + +Package: libreoffice-calc-nogui +Architecture: %OOO_NOGUI_ARCHS% +Depends: libreoffice-base-core (= ${binary:Version})%OOO_NO_BASE_ARCHS%, + libreoffice-core-nogui (= ${binary:Version}) | libreoffice-core (= ${binary:Version}), + libreoffice-common (>= 1:7.0.0~alpha~), + ${lpsolve-dep}, + ${misc:Depends}, + ${shlibs:Depends} +Replaces: libreoffice-common (<< 1:6.4.2~rc1~), libreoffice-calc +Breaks: libreoffice-common (<< 1:6.4.2~rc1~) +Conflicts: libreoffice-calc +Description: office productivity suite -- spreadsheet (no GUI variant) + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + This package contains the spreadsheet component for LibreOffice + for use with libreoffice-core-nogui. + +Package: libreoffice-impress +Architecture: %OOO_ARCHS% +Depends: libreoffice-core (= ${binary:Version}), + libreoffice-draw (= ${binary:Version}), + libreoffice-common (>= 1:7.0.0~alpha~), + ${misc:Depends}, + ${shlibs:Depends} +Replaces: libreoffice-common (<< 1:6.4.2~rc1~), libreoffice-ogltrans (<< 1:6.1.4-2~) +Conflicts: libreoffice-ogltrans (<< 1:6.1.4-2~) +Provides: libreoffice-ogltrans +Breaks: libreoffice-common (<< 1:6.4.2~rc1~) +Description: office productivity suite -- presentation + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + This package contains the presentation component for LibreOffice. + +Package: libreoffice-impress-nogui +Architecture: %OOO_NOGUI_ARCHS% +Depends: libreoffice-core-nogui (= ${binary:Version}) | libreoffice-core (= ${binary:Version}), + libreoffice-draw-nogui (= ${binary:Version}) | libreoffice-draw (= ${binary:Version}), + libreoffice-common (>= 1:7.0.0~alpha~), + ${misc:Depends}, + ${shlibs:Depends} +Replaces: libreoffice-common (<< 1:6.4.2~rc1~), libreoffice-impress +Conflicts: libreoffice-ogltrans (<< 1:6.1.4-2~), libreoffice-impress +Breaks: libreoffice-common (<< 1:6.4.2~rc1~) +Description: office productivity suite -- presentation (no GUI variant) + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + This package contains the presentation component for LibreOffice. + +Package: libreoffice-draw +Architecture: %OOO_ARCHS% +Depends: libreoffice-core (= ${binary:Version}), + libreoffice-common (>= 1:7.0.0~alpha~), + ${misc:Depends}, + ${shlibs:Depends} +Replaces: libreoffice-core (<< 1:6.4.1~rc1-3), libreoffice-impress (<< 1:5.2.0-2), libreoffice-common (<< 1:6.4.2~rc1~) +Breaks: libreoffice-core (<< 1:6.4.1~rc1-3), libreoffice-impress (<< 1:5.2.0-2), libreoffice-common (<< 1:6.4.2~rc1~) +Description: office productivity suite -- drawing + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + This package contains the drawing component for LibreOffice. + +Package: libreoffice-draw-nogui +Architecture: %OOO_NOGUI_ARCHS% +Depends: libreoffice-core-nogui (= ${binary:Version}) | libreoffice-core (= ${binary:Version}), + libreoffice-common (>= 1:7.0.0~alpha~), + ${misc:Depends}, + ${shlibs:Depends} +Replaces: libreoffice-impress (<< 1:5.2.0-2), libreoffice-common (<< 1:6.4.2~rc1~), libreoffice-draw +Breaks: libreoffice-impress (<< 1:5.2.0-2), libreoffice-common (<< 1:6.4.2~rc1~) +Conflicts: libreoffice-draw +Description: office productivity suite -- drawing (no GUI variant) + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + This package contains the drawing component for LibreOffice. + +Package: libreoffice-math +Architecture: %OOO_ARCHS% +Depends: fonts-opensymbol (>= 2:102.11), + libreoffice-core (= ${binary:Version}), + libreoffice-common (>= 1:7.0.0~alpha~), + ${misc:Depends}, + ${shlibs:Depends} +Replaces: libreoffice-common (<< 1:6.4.2~rc1~) +Breaks: libreoffice-common (<< 1:6.4.2~rc1~) +Description: office productivity suite -- equation editor + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + This package contains the equation editor component for LibreOffice. + +Package: libreoffice-math-nogui +Architecture: %OOO_NOGUI_ARCHS% +Depends: fonts-opensymbol (>= 2:102.11), + libreoffice-core-nogui (= ${binary:Version}) | libreoffice-core (= ${binary:Version}), + libreoffice-common (>= 1:7.0.0~alpha~), + ${misc:Depends}, + ${shlibs:Depends} +Replaces: libreoffice-common (<< 1:6.4.2~rc1~), libreoffice-math +Conflicts: libreoffice-common (<< 1:6.4.2~rc1~), libreoffice-math +Description: office productivity suite -- equation editor (no GUI variant) + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + This package contains the equation editor component for LibreOffice. + +Package: libreoffice-base-core +Architecture: %OOO_BASE_ARCHS% +Depends: libreoffice-core-nogui (= ${binary:Version}) | libreoffice-core (= ${binary:Version}), + ${misc:Depends}, + ${shlibs:Depends} +Suggests: libreoffice-base +Replaces: libreoffice-base-drivers (<< 1:6.1.1~rc1-2) +Description: office productivity suite -- shared library + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + This package contains common libraries of LibreOffice Base used by + Base, Writer and Calc. + . + If you need full Base functionality (or actual database drivers), please + install libreoffice-base (and/or libreoffice-base-drivers and/o + libreoffice-sdbc-*). + +Package: libreoffice-base +Architecture: %OOO_BASE_ARCHS% +Section: database +Pre-Depends: dpkg (>= 1.19.1) +Depends: libreoffice-base-core (= ${binary:Version}), + libreoffice-base-drivers (= ${binary:Version}), + libreoffice-core (= ${binary:Version}), + libreoffice-common (>= 1:7.0.0~alpha~), + ${misc:Depends}, + ${shlibs:Depends} +Suggests: libreoffice-report-builder, + unixodbc, + python3-uno +Recommends: libreoffice-writer, ${java-common-depends}, ${java-runtime-depends} +Replaces: libreoffice-common (<< 1:6.4.2~rc1~) +Breaks: libreoffice-common (<< 1:6.4.2~rc1~) +Description: office productivity suite -- database + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + This package contains the database component for LibreOffice. + +Package: libreoffice-base-nogui +Architecture: %OOO_NOGUI_ARCHS% +Section: database +Depends: libreoffice-base-core (= ${binary:Version}), + libreoffice-base-drivers (= ${binary:Version}), + libreoffice-core-nogui (= ${binary:Version}) | libreoffice-core (= ${binary:Version}), + libreoffice-common (>= 1:7.0.0~alpha~), + ${misc:Depends}, + ${shlibs:Depends} +Suggests: libreoffice-report-builder, + unixodbc, + python3-uno +Recommends: libreoffice-writer, ${java-common-depends}, ${java-runtime-depends} +Replaces: libreoffice-common (<< 1:6.4.2~rc1~), libreoffice-base +Breaks: libreoffice-common (<< 1:6.4.2~rc1~) +Conflicts: libreoffice-base +Description: office productivity suite -- database (no GUI variant) + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + This package contains the database component for LibreOffice. + +Package: libreoffice-style-breeze +Architecture: all +Enhances: libreoffice-core +Depends: libreoffice-style-colibre, ${misc:Depends} +Suggests: breeze-icon-theme +Provides: libreoffice-style +Recommends: libreoffice-common +Description: office productivity suite -- Breeze symbol style + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + This package contains the "breeze" symbol style, default style for KDE 5. + +Package: libreoffice-style-colibre +Architecture: all +Enhances: libreoffice-core +Depends: ${misc:Depends} +Provides: libreoffice-style +Recommends: libreoffice-common +Description: office productivity suite -- colibre symbol style + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + This package contains the "colibre" symbol style - a icon theme + which follow Microsoft(R) Offices color scheme. + +Package: libreoffice-style-sifr +Architecture: all +Enhances: libreoffice-core +Depends: libreoffice-style-breeze, ${misc:Depends} +Provides: libreoffice-style, libreoffice-style-hicontrast +Replaces: libreoffice-style-hicontrast +Conflicts: libreoffice-style-hicontrast +Recommends: libreoffice-common +Description: office productivity suite -- Sifr symbol style + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + This package contains the "sifr" symbol style (an adaption of the Gnome + symbolic theme), needs to be manually enabled in the LibreOffice option + menu. + +Package: libreoffice-style-elementary +Architecture: all +Depends: libreoffice-style-colibre, ${misc:Depends} +Enhances: libreoffice-core +Provides: libreoffice-style +Recommends: libreoffice-common +Description: office productivity suite -- Elementary symbol style + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + This package contains the "elementary" symbol style, default style + for GTK+/Gnome. + +Package: libreoffice-style-karasa-jaga +Architecture: all +Depends: ${misc:Depends} +Enhances: libreoffice-core +Provides: libreoffice-style +Recommends: libreoffice-common +Description: office productivity suite -- Karasa Jaga symbol style + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + This package contains the "karasa_jaga" symbol style. + +Package: libreoffice-style-sukapura +Architecture: all +Depends: ${misc:Depends} +Enhances: libreoffice-core +Provides: libreoffice-style +Recommends: libreoffice-common +Description: office productivity suite -- Sukapura symbol style + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + This package contains the "sukapura" symbol style. + +Package: libreoffice-gnome +Architecture: %OOO_ARCHS% +Depends: libreoffice-core (= ${binary:Version}), + libreoffice-common (>= 1:7.0.0~alpha~), + ${misc:Depends}, + ${shlibs:Depends} +Recommends: ${gnome-gtk-recommends}, libreoffice-style-elementary +Suggests: libreoffice-evolution, seahorse +Section: gnome +Enhances: libreoffice +Provides: libreoffice-gtk-gnome +Replaces: libreoffice-gtk (<< 1:5.0.0~rc2-1) +Description: office productivity suite -- GNOME integration + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + This package contains the GIO support. + . + You can extend the functionality of this by installing these packages: + . + * libreoffice-evolution: Evolution addressbook support + * evolution + +Package: python3-uno +Section: python +Architecture: %OOO_ARCHS% +Enhances: libreoffice +Depends: libreoffice-core-nogui (= ${binary:Version}) | libreoffice-core (= ${binary:Version}), + libreoffice-common (>= 1:7.0.0~alpha~), + ${misc:Depends}, + ${python3:Depends}, + ${shlibs:Depends} +Conflicts: python-uno +Replaces: libreoffice-core (= 1:4.3.0~beta1-1), libreoffice-common (<< 1:4.4.0~beta2) +Build-Profiles: +Description: Python-UNO bridge + The Python-UNO bridge allows use of the standard LibreOffice API + with the Python scripting language. It additionally allows + others to develop UNO components in Python, thus Python UNO components + may be run within the LibreOffice process and can be called from C++ + or the built in StarBasic scripting language. +Homepage: http://udk.openoffice.org/python/python-bridge.html + +Package: libreoffice-script-provider-python +Architecture: all +Section: python +Depends: libreoffice-common, + libreoffice-core-nogui | libreoffice-core, + ${misc:Depends}, + ${python3:Depends}, + ${pyuno-depends} +Build-Profiles: +Description: Python script support provider for LibreOffice scripting framework + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + The Scripting Framework allows LibreOffice users to write and run macros + in multiple languages including LibreOffice Basic, Python, Java, BeanShell + and JavaScript. These macros can then be assigned to menus, toolbars, + keyboard shortcuts, events and embedded objects. + . + This package contains the script provider to support Python. + +Package: libreoffice-script-provider-bsh +Architecture: all +Section: java +Depends: libreoffice-common, + libreoffice-core-nogui | libreoffice-core, + ${java-common-depends}, + liblibreoffice-java, + ${java:Depends}, + ${java-runtime-depends}, + ${misc:Depends} +Description: BeanShell script support provider for LibreOffice scripting framework + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + The Scripting Framework allows LibreOffice users to write and run macros + in multiple languages including LibreOffice Basic, Python, Java, BeanShell + and JavaScript. These macros can then be assigned to menus, toolbars, + keyboard shortcuts, events and embedded objects. + . + This package contains the script provider to support BeanShell. + +Package: libreoffice-script-provider-js +Architecture: all +Section: web +Depends: libreoffice-common, + libreoffice-core-nogui | libreoffice-core, + ${java-common-depends}, + liblibreoffice-java, + ${java:Depends}, + ${java-runtime-depends}, + ${misc:Depends} +Description: JavaScript script support provider for LibreOffice scripting framework + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + The Scripting Framework allows LibreOffice users to write and run macros + in multiple languages including LibreOffice Basic, Python, Java, BeanShell + and JavaScript. These macros can then be assigned to menus, toolbars, + keyboard shortcuts, events and embedded objects. + . + This package contains the script provider to support JavaScript. + +Package: libreoffice-sdbc-hsqldb +Depends: libreoffice-core-nogui | libreoffice-core, ${java-common-depends}, ${java:Depends}, ${java-runtime-depends}, ${shlibs:Depends}, ${misc:Depends} +Architecture: %OOO_JAVA_ARCHS% +Section: database +Enhances: libreoffice-base-drivers +Description: HSQLDB SDBC driver for LibreOffice + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + The HSQLDB SDBC Driver allows one to use the HSQLDB embedded database from + LibreOffice without any wrapper layer such as ODBC or JDBC. + +Package: libreoffice-sdbc-mysql +Section: database +Architecture: %OOO_BASE_ARCHS% +Depends: libreoffice-core-nogui | libreoffice-core, ${misc:Depends}, ${shlibs:Depends} +Suggests: default-mysql-server | virtual-mysql-server +Description: MariaDB/MySQL SDBC driver for LibreOffice + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + The MariaDB/MySQL driver allows one to use the MariaDB or MySQL + database from LibreOffice without any wrapper layer such as ODBC or JDBC. + +Package: libreoffice-base-drivers +Depends: libreoffice-core-nogui | libreoffice-core, ${shlibs:Depends}, ${misc:Depends} +Architecture: %OOO_BASE_ARCHS% +Section: database +Suggests: libreoffice-sdbc-postgresql | odbc-postgresql | libpg-java, + libreoffice-sdbc-mysql | libmyodbc | libmariadb-java, + libsqliteodbc | tdsodbc | odbc-mdbtools, + libjtds-java, +Recommends: libreoffice-sdbc-hsqldb [%OOO_JAVA_ARCHS%], ${base-firebird-recommends} +Replaces: libreoffice-base (<< 1:4.3.0-3), libreoffice-core (<< 1:6.2.0~beta1~) +Breaks: libreoffice-base (<< 1:4.3.0-3) +Description: Database connectivity drivers for LibreOffice + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + This package contains the database connectivity drivers used by LibreOffices + database functionality: + - ODBC + - JDBC + - dBase + - Calc + - Flat files + . + You can extend this by installing: + . + * unixodbc: ODBC database support + * libmyodbc | odbc-postgresql | libsqliteodbc | tdsodbc | odbc-mdbtools: ODBC + drivers for: + - MySQL + - PostgreSQL + - SQLite + - MS SQL / Sybase SQL + - *.mdb (JET / MS Access) + * libmariadb-java | libpg-java | libjtds-java: JDBC Drivers + for: + - MySQL/MariaDB + - PostgreSQL + - MS SQL Server and Sybase + * libreoffice-sdbc-hsqldb: embedded HSQLDB SDBC Driver + * libreoffice-sdbc-firebird: Firebird SDBC Driver + * libreoffice-sdbc-postgresql: PostgreSQL SDBC Driver + * libreoffice-sdbc-mysql: MySQL/MariaDB SDBC Driver + +Package: python3-access2base +Section: python +Architecture: all +Homepage: http://www.access2base.com/access2base.html +Depends: libreoffice-common (>= 1:6.4.0~beta1-2~), libreoffice-base, python3-uno, ${python3:Depends}, ${misc:Depends} +Replaces: libreoffice-base +Description: interface between Python and the LibreOffice Access2Base library + Access2Base is a LibreOffice/OpenOffice Basic library of macros for + (business or personal) application developers and advanced users. + . + Their syntax and their meaning are directly inspired by MSAccess. + The macros are callable from + - a LibreOffice / OpenOffice Base application, + - any LibreOffice / OpenOffice document wanting to access data + stored in databases. + . + This package contains an interface between Python (user) scripts + and Access2Base. + +Package: libunoil-java +Section: oldlibs +Depends: ${java:Depends}, ${misc:Depends}, libridl-java +Architecture: all +Replaces: libreoffice-java-common (<< 1:6.4.0~rc1-6) +Breaks: libreoffice-java-common (<< 1:6.4.0~rc1-6) +Description: LibreOffice UNO runtime environment -- UNO interface library (compatibility library) + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + This package formerly contained the precompiled Java interfaces of + the LibreOffice API. + . + This has now been merged into liblibreoffice-java but this package still + exists for compatibility with applications referencing the old + library. + +Package: libreoffice-officebean +Architecture: %OOO_JAVA_ARCHS% +Section: oldlibs +Depends: libreoffice-core-nogui (= ${binary:Version}) | libreoffice-core (= ${binary:Version}), + libofficebean-java (>= 1:6.4.0~rc2), +Description: transitional package for libofficebean-java + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + This package formerly contained binaries for the the LibreOffice Office Bean + for embedding LibreOffice in custom Java applications. + . + This has now been merged into libofficebean-java so this package can safely + be removed. + +Package: libofficebean-java +Section: java +Depends: liblibreoffice-java, + ${java-runtime-depends}, + ${java:Depends}, + ${shlibs:Depends}, + ${misc:Depends} +Recommends: libreoffice-core-nogui | libreoffice-core +Architecture: %OOO_JAVA_ARCHS% +Replaces: libreoffice-officebean (<< 1:6.4.0~rc2-1) +Breaks: libreoffice-officebean (<< 1:6.4.0~rc2-1) +Description: generic Java Bean wrapper for LibreOffice components + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + This package contains the Java library for the the LibreOffice Office Bean + for embedding LibreOffice in custom Java applications. + diff --git a/debian/control.kf5.in b/debian/control.kf5.in new file mode 100644 index 00000000000..3eaa5b3702c --- /dev/null +++ b/debian/control.kf5.in @@ -0,0 +1,17 @@ +Package: libreoffice-kf5 +Architecture: %OOO_ARCHS% +Depends: libreoffice-core (= ${binary:Version}), + ${kf5-qt5-depends}, + ${misc:Depends}, + ${shlibs:Depends} +Recommends: ${plasma-iconset-dep} +Replaces: libreoffice-kde (<< 1:6.1.0~alpha1-1) +Section: kde +Enhances: libreoffice +Description: office productivity suite -- KDE Frameworks 5 integration + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + This package contains the KF5 plugin for LibreOffice and a KF5-based File + Picker when running under Plasma. + diff --git a/debian/control.lang.in b/debian/control.lang.in new file mode 100644 index 00000000000..95036569354 --- /dev/null +++ b/debian/control.lang.in @@ -0,0 +1,29 @@ +Package: libreoffice-l10n-@LCODE@ +Section: localization +Architecture: all +Depends: libreoffice-common (>= 1:7.0.0~alpha~), ${misc:Depends}, @LOCALES_DEPENDS@ +Recommends: libreoffice-core (>> ${base-version}) @FONT_RECOMMENDS@ +Provides: libreoffice-l10n (= ${help-l10n-virtual-version}) +Suggests: hunspell-dictionary-@LCODE@ | myspell-dictionary-@LCODE@, + hyphen-@LCODE@, + libreoffice-grammarcheck-@LCODE@, + libreoffice-help-@LCODE@, + mythes-@LCODE@ +Description: office productivity suite -- @LNAME@ language package + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + This package contains the localization of LibreOffice in + @LNAME@. + It contains the user interface, the templates and the autotext features. + (please note that not all this is available for all possible languages). + You can switch user interface language using the locales system. + . + Spelling dictionaries, hyphenation patterns, thesauri and help are not + included in this package. There are some available in separate packages + (myspell-*, hyphen-*, mythes-*, libreoffice-help-*) + . + If you just want to be able to spellcheck etc. in other languages, you can + install extra dictionaries/hyphenation patterns/thesauri independently of + the language packs. + diff --git a/debian/control.librelogo.in b/debian/control.librelogo.in new file mode 100644 index 00000000000..a07a2e08e2d --- /dev/null +++ b/debian/control.librelogo.in @@ -0,0 +1,22 @@ +Package: libreoffice-librelogo +Section: misc +Architecture: all +Depends: libreoffice-core, + libreoffice-writer, + libreoffice-script-provider-python, + libreoffice-common (>= 1:7.0.0~alpha), + ${misc:Depends} +Build-Profiles: +Homepage: http://librelogo.org +Description: Logo-like programming language for LibreOffice + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + This package contains Librelogo, which is a pyuno-based Logo-like programming + language with interactive vectorgraphics for education and DTP + - basic Logo syntax for back compatibility with educational Logo systems + - interactive vectorgraphics in LibreOffice Writer + - native commands (easily translatable) + - Python data structures (list, tuple, set, dictionary) and other Python + features + diff --git a/debian/control.lokit.in b/debian/control.lokit.in new file mode 100644 index 00000000000..59dfd57c26f --- /dev/null +++ b/debian/control.lokit.in @@ -0,0 +1,16 @@ +Package: libreofficekit-dev +Section: libdevel +Architecture: %OOO_ARCHS% +Depends: ${misc:Depends}, gir1.2-lokdocview-0.1 (= ${binary:Version}) +Suggests: libgtk-3-dev +Recommends: libreoffice-core, libreofficekit-data +Replaces: gir1.2-lokdocview-0.1 (<< 1:5.4.0~rc1) +Description: LibreOfficeKit -- headers + LibreOfficeKit can be used for accessing LibreOffice functionality through + C/C++, without any need to use UNO. + . + For now it only offers document conversion (in addition to an experimental + tiled rendering API). + . + This package contains the headers needed for using LibreOfficeKit. + diff --git a/debian/control.mediawiki.in b/debian/control.mediawiki.in new file mode 100644 index 00000000000..9255a51a0aa --- /dev/null +++ b/debian/control.mediawiki.in @@ -0,0 +1,18 @@ +Package: libreoffice-wiki-publisher +Section: misc +Architecture: all +Depends: libreoffice-core, + liblibreoffice-java, + ${java-common-depends}, + ${java:Depends}, + ${java-runtime-depends}, + ${misc:Depends} +Enhances: libreoffice-writer +Suggests: mediawiki +Description: LibreOffice extension for working with MediaWiki articles + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + This package contains an extension to create/edit/publish MediaWiki + articles with LibreOffice + diff --git a/debian/control.nlpsolver.in b/debian/control.nlpsolver.in new file mode 100644 index 00000000000..9b540eeaa8c --- /dev/null +++ b/debian/control.nlpsolver.in @@ -0,0 +1,14 @@ +Package: libreoffice-nlpsolver +Architecture: all +Depends: ${misc:Depends}, libreoffice-calc, libreoffice-core, liblibreoffice-java, ${java-common-depends}, ${java-runtime-depends} +Section: math +Description: "Solver for Nonlinear Programming" extension for LibreOffice + By default LibreOffice Calc ships with a solver engine for linear + programming only. This allows the optimization of models to a certain degree. + However, if the formulas or constraints become more complex, + nonlinear programming is required. That missing gap is now filled by the + Solver for Nonlinear Programming extension. + . + Currently it incorporates two Evolutionary Algorithms which are able to + handle floating point and integer variables as well as nonlinear constraints. + diff --git a/debian/control.plasma.in b/debian/control.plasma.in new file mode 100644 index 00000000000..640f076ceb8 --- /dev/null +++ b/debian/control.plasma.in @@ -0,0 +1,13 @@ +Package: libreoffice-plasma +Architecture: %OOO_ARCHS% +Depends: libreoffice-core (= ${binary:Version}), + ${misc:Depends}, + ${shlibs:Depends} +Replaces: libreoffice-kde5 (<< 1:6.4.0~) +Description: office productivity suite -- some Plasma integration + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + This package contains some minor Plasma integration (like AppData + and "Create New..." integration) and a KDE/KF5 configuration backend. + diff --git a/debian/control.postgresql.in b/debian/control.postgresql.in new file mode 100644 index 00000000000..ffbfb05b4be --- /dev/null +++ b/debian/control.postgresql.in @@ -0,0 +1,17 @@ +Package: libreoffice-sdbc-postgresql +Section: misc +Architecture: %OOO_BASE_ARCHS% +Depends: libreoffice-core, + libreoffice-common (>= 1:7.0.0~alpha), + ${misc:Depends}, + ${shlibs:Depends} +Suggests: postgresql (>= 8.4) +Enhances: libreoffice-base-drivers +Description: PostgreSQL SDBC driver for LibreOffice + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + The PostgreSQL SDBC Driver allows one to use the PostgreSQL database from + LibreOffice without any wrapper layer such as ODBC or JDBC. +Homepage: http://wiki.documentfoundation.org/PostgreSQL-SDBC + diff --git a/debian/control.qt5.in b/debian/control.qt5.in new file mode 100644 index 00000000000..9681f5f6a3f --- /dev/null +++ b/debian/control.qt5.in @@ -0,0 +1,14 @@ +Package: libreoffice-qt5 +Architecture: %OOO_ARCHS% +Depends: libreoffice-core (= ${binary:Version}), + ${misc:Depends}, + ${shlibs:Depends} +Recommends: qtgstreamer-plugins-qt5 +Enhances: libreoffice +Description: office productivity suite -- Qt 5 integration + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + This package contains the Qt 5 plugin for drawing LibreOffices widgets + with Qt 5 and a Qt File Picker and print dialog. + diff --git a/debian/control.reportbuilder.in b/debian/control.reportbuilder.in new file mode 100644 index 00000000000..4a2edd0115d --- /dev/null +++ b/debian/control.reportbuilder.in @@ -0,0 +1,55 @@ +Package: libreoffice-report-builder +Section: misc +Architecture: all +Depends: libreoffice-core | libreoffice-core-nogui, + libreoffice-report-builder-bin (>= ${base-version}), + libreoffice-common (>= 1:7.0.0~alpha), + liblibreoffice-java, + ${java:Depends}, + ${java-common-depends}, + ${misc:Depends}, + ${report-builder-jar-depends} +Provides: libreoffice-reportdesigner +Enhances: libreoffice-base +Breaks: libreoffice-common (<< 1:6.4.2~rc1~) +Replaces: libreoffice-common (<< 1:6.4.2~r~~) +Description: LibreOffice component for building database reports + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + This package contains the report builder: + "Create with the Sun Report Builder stylish, smart-looking database reports. + The flexible report editor can define group and page headers as well as + group and page footers and even calculation fields are available to + accomplish complex database reports." + +Package: libreoffice-report-builder-bin +Section: misc +Architecture: %OOO_REPORTBUILDER_ARCHS% +Depends: libreoffice-core, + libreoffice-base, + ${misc:Depends}, + ${shlibs:Depends} +Description: LibreOffice component for building database reports -- libraries + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + This package contains some architecture-dependent support libraries + (librpt*.so) for the report builder component. + +Package: libreoffice-report-builder-bin-nogui +Section: misc +Architecture: %OOO_REPORTBUILDER_ARCHS% +Depends: libreoffice-core-nogui | libreoffice-core, + libreoffice-base-nogui | libreoffice-base, + ${misc:Depends}, + ${shlibs:Depends} +Conflicts: libreoffice-report-builder-bin +Replaces: libreoffice-report-builder-bin +Description: LibreOffice component for building database reports -- libraries (no GUI variant) + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + This package contains some architecture-dependent support libraries + (librpt*.so) for the report builder component. + diff --git a/debian/control.sdk.in b/debian/control.sdk.in new file mode 100644 index 00000000000..4372651cf56 --- /dev/null +++ b/debian/control.sdk.in @@ -0,0 +1,70 @@ +Package: libreoffice-dev +Section: devel +Architecture: %OOO_ARCHS% +Depends: libreoffice-core-nogui (= ${binary:Version}) | libreoffice-core (= ${binary:Version}), + libreoffice-dev-common (= ${source:Version}), + ${idlc-cpp-depends}, + ${misc:Depends}, + ${shlibs:Depends} +Recommends: g++, ${java-common-depends}, ${java-runtime-depends} +Suggests: libmythes-dev, libreofficekit-dev, libreoffice-dev-doc +Replaces: libreoffice-dev-common (<< 1:5.4.1~) +Conflicts: libreoffice-dev-doc (<< 1:5.2.5-2~), libreoffice (<< 1:5.2.5-2~) +Breaks: libreoffice-dev-common (<< 1:5.4.1~) +Description: office productivity suite -- SDK -- architecture-dependent parts + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + This package contains the (architecture-dependent) files needed to build + plugins/add-ons for LibreOffice (build tools, libraries, arch-dependent + includes, ...). + +Package: libreoffice-dev-gui +Section: devel +Architecture: %OOO_ARCHS% +Depends: libreoffice-core (= ${binary:Version}), + libreoffice-dev (= ${binary:Version}), + libreoffice-dev-common (= ${source:Version}), + ${misc:Depends}, + ${shlibs:Depends} +Replaces: libreoffice-dev (<< 1:7.0.0~) +Breaks: libreoffice-dev (<< 1:7.0.0~) +Description: office productivity suite -- "GUI" development stuff + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + This package contains the gengal and ui-previewer utilities which were moved + from libreoffice-dev. + +Package: libreoffice-dev-common +Section: devel +Architecture: all +Depends: ${misc:Depends} +Replaces: libreoffice-dev (<< 1:5.2.0~) +Breaks: libreoffice-dev (<< 1:5.2.0~) +Conflicts: libreoffice (<< 1:5.2.5-2~) +Description: office productivity suite -- SDK -- architecture-independent parts + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + This package contains the (architecture-independent) files needed to build + plugins/add-ons for LibreOffice (includes, IDL files, ...) + +Package: libreoffice-dev-doc +Section: doc +Architecture: all +Depends: ${misc:Depends} +Recommends: libreoffice-dev (= ${binary:Version}), + www-browser +Conflicts: openoffice.org-dev-doc, libreoffice-dev (<= 1:5.0.3~rc1-2), libreoffice (<< 1:5.2.5-2~) +Build-Profiles: +Description: office productivity suite -- SDK documentation + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + This package contains the documentation of the LibreOffice SDK: + . + * C++/Java API reference + * IDL reference + * C++/Java/Basic examples + diff --git a/debian/control.test-packages.in b/debian/control.test-packages.in new file mode 100644 index 00000000000..bbe7d9d1037 --- /dev/null +++ b/debian/control.test-packages.in @@ -0,0 +1,18 @@ +Package: libreoffice-subsequentcheckbase +Section: libs +Architecture: all +Depends: liblibreoffice-java, ${java:Depends}, ${misc:Depends} +Build-Profiles: +Description: LibreOffice java test libraries + Java libraries LibreOffice subsequentchecks integration test suite + +Package: libreoffice-smoketest-data +Section: misc +Depends: ${misc:Depends} +Architecture: all +Build-Profiles: +Replaces: libreoffice-java-common (<< 1:6.4.0~rc1-6) +Breaks: libreoffice-java-common (<< 1:6.4.0~rc1-6) +Description: data files for LibreOffices "smoketest" + Data files for the LibreOffice "smoketest". + diff --git a/debian/control.transitionals.in b/debian/control.transitionals.in new file mode 100644 index 00000000000..c31c6fba2a9 --- /dev/null +++ b/debian/control.transitionals.in @@ -0,0 +1,36 @@ +Package: libreoffice-mysql-connector +Section: oldlibs +Architecture: %OOO_BASE_ARCHS% +Depends: libreoffice-sdbc-mysql, ${misc:Depends} +Description: transitional package for MariaDB/MySQL Connector extension for LibreOffice + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + This package used to contain the LibreOffice MySQL/MariaDB Connector extension. + This has now been added to the "main" packages (libreoffice-sdbc-mysql) + and this package thus can be safely removed once installed. + +Package: libreoffice-avmedia-backend-gstreamer +Section: oldlibs +Architecture: %OOO_ARCHS% +Depends: libreoffice-core (>> 1:6.3.0~rc1~), ${misc:Depends} +Description: transitional package for GStreamer backend for LibreOffice + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + This package used to contain the GStreamer backend for LibreOffice. + This has now been merged into the "core" package and this package thus + can be safely removed once installed. + +Package: libreoffice-kde5 +Section: oldlibs +Architecture: %OOO_ARCHS% +Depends: libreoffice-plasma, libreoffice-kf5 +Description: transitional package for LibreOffice "KDE 5" integration + LibreOffice is a full-featured office productivity suite that provides + a near drop-in replacement for Microsoft(R) Office. + . + This package used to contain the "KDE 5" integration. It was split + into -kf5 (KF5 UI plugin) and -plasma (some Plasma integration). This + packsge can be safely removed once installed. + diff --git a/debian/control.ure.in b/debian/control.ure.in new file mode 100644 index 00000000000..7b16b3c31bd --- /dev/null +++ b/debian/control.ure.in @@ -0,0 +1,199 @@ +Package: uno-libs-private +Section: libs +Architecture: %OOO_ARCHS% +Depends: ${misc:Depends}, ${shlibs:Depends} +Replaces: uno-libs3 +Breaks: uno-libs3 +Description: LibreOffice UNO runtime environment -- private libraries used by public ones + The Uno Runtime Environment (URE) is the well-known UNO component model + of LibreOffice, packaged up as an individual product. + . + It offers you a flexible, low-overhead component model that is most ideal + for (but not limited to) combining in one application components written in + different computer languages, and developed by different parties. You can use + it to create any kind of application, in whatever application domain you can + imagine. + . + This package contains some private UNO/URE libraries which are used by public + ones (e.g. cppu). + +Package: libuno-sal3 +Section: libs +Architecture: %OOO_ARCHS% +Depends: ${misc:Depends}, ${shlibs:Depends} +Replaces: ure (<< 5.0.0~rc2-1), uno-libs3 +Breaks: libreoffice-core (<< 1:4.3.0~), uno-libs3 +Description: LibreOffice UNO runtime environment -- SAL public library + The Uno Runtime Environment (URE) is the well-known UNO component model + of LibreOffice, packaged up as an individual product. + . + It offers you a flexible, low-overhead component model that is most ideal + for (but not limited to) combining in one application components written in + different computer languages, and developed by different parties. You can use + it to create any kind of application, in whatever application domain you can + imagine. + . + This package contains the System Abstraction Layer (SAL) library. + +Package: libuno-salhelpergcc3-3 +Section: libs +Architecture: %OOO_ARCHS% +Depends: ${misc:Depends}, ${shlibs:Depends} +Replaces: ure (<< 5.0.0~rc2-1), uno-libs3 +Breaks: libreoffice-core (<< 1:4.3.0~), uno-libs3 +Description: LibreOffice UNO runtime environment -- SAL helpers for C++ library + The Uno Runtime Environment (URE) is the well-known UNO component model + of LibreOffice, packaged up as an individual product. + . + It offers you a flexible, low-overhead component model that is most ideal + for (but not limited to) combining in one application components written in + different computer languages, and developed by different parties. You can use + it to create any kind of application, in whatever application domain you can + imagine. + . + This package contains C++ helpers to make use of sal easier. + +Package: libuno-cppu3 +Section: libs +Architecture: %OOO_ARCHS% +Depends: ${misc:Depends}, ${shlibs:Depends} +Replaces: ure (<< 5.0.0~rc2-1), uno-libs3 +Breaks: libreoffice-core (<< 1:4.3.0~), uno-libs3 +Description: LibreOffice UNO runtime environment -- CPPU public library + The Uno Runtime Environment (URE) is the well-known UNO component model + of LibreOffice, packaged up as an individual product. + . + It offers you a flexible, low-overhead component model that is most ideal + for (but not limited to) combining in one application components written in + different computer languages, and developed by different parties. You can use + it to create any kind of application, in whatever application domain you can + imagine. + . + This package contains CPPU, the type definitions/implementations for the core + of UNO. + +Package: libuno-cppuhelpergcc3-3 +Section: libs +Architecture: %OOO_ARCHS% +Depends: ${misc:Depends}, ${shlibs:Depends}, uno-libs-private (= ${binary:Version}) +Replaces: ure (<< 5.0.0~rc2-1), uno-libs3 +Breaks: libreoffice-core (<< 1:4.3.0~), uno-libs3 +Description: LibreOffice UNO runtime environment -- CPPU helper library + The Uno Runtime Environment (URE) is the well-known UNO component model + of LibreOffice, packaged up as an individual product. + . + It offers you a flexible, low-overhead component model that is most ideal + for (but not limited to) combining in one application components written in + different computer languages, and developed by different parties. You can use + it to create any kind of application, in whatever application domain you can + imagine. + . + This package contains the cppuhelper library (helpers for using cppu in C++, + e.g. templates for implementing UNO components, bootstrapping stuff) + +Package: libuno-purpenvhelpergcc3-3 +Section: libs +Architecture: %OOO_ARCHS% +Depends: ${misc:Depends}, ${shlibs:Depends} +Replaces: ure (<< 5.0.0~rc2-1), uno-libs3 +Breaks: libreoffice-core (<< 1:4.3.0~), uno-libs3 +Description: LibreOffice UNO runtime environment -- "purpose environment" helper + The Uno Runtime Environment (URE) is the well-known UNO component model + of LibreOffice, packaged up as an individual product. + . + It offers you a flexible, low-overhead component model that is most ideal + for (but not limited to) combining in one application components written in + different computer languages, and developed by different parties. You can use + it to create any kind of application, in whatever application domain you can + imagine. + . + This package contains a library which contains a helper for implementing + so-called "purpose environments". + +Package: ure +Section: libs +Architecture: %OOO_ARCHS% +Depends: ${misc:Depends}, ${shlibs:Depends}, uno-libs-private (= ${binary:Version}) +Recommends: liblibreoffice-java, libjuh-java, libjurt-java, libridl-java, libunoloader-java +Suggests: ${java-runtime-depends} +Replaces: libreoffice-common (<< 1:4.5.0), libreoffice-core (<< 1:5.3.0~beta1~), libjuh-java (<< 1:6.4.0~rc1-6), libridl-java (<< 1:6.4.0~rc1-6), libunoloader-java (<< 1:6.4.0~rc1-6), libjurt-java (<< 1:6.4.0~rc1-6) +Breaks: libreoffice-core (<< 1:5.3.0~beta1~), libreoffice-common (<< 1:4.5.0), libjuh-java (<< 1:6.4.0~rc1-6), libridl-java (<< 1:6.4.0~rc1-6), libunoloader-java (<< 1:6.4.0~rc1-6), libjurt-java (<< 1:6.4.0~rc1-6) +Description: LibreOffice UNO runtime environment + The Uno Runtime Environment (URE) is the well-known UNO component model + of LibreOffice, packaged up as an individual product. + . + It offers you a flexible, low-overhead component model that is most ideal + for (but not limited to) combining in one application components written in + different computer languages, and developed by different parties. You can use + it to create any kind of application, in whatever application domain you can + imagine. + +Package: libjuh-java +Architecture: all +Section: oldlibs +Depends: ${java:Depends}, ${misc:Depends}, liblibreoffice-java +Replaces: ure (<< 6.4.0~rc1-6) +Breaks: ure (<< 6.4.0~rc1-6) +Description: LibreOffice UNO runtime environment -- Java Uno helper (compatibility library) + The Uno Runtime Environment (URE) is the well-known UNO component model + of LibreOffice, packaged up as an individual product. + . + This package formerly contained various tools and adapters for Java Uno. + . + This has now been merged into liblibreoffice-java but this package still exists + for compatibility with applications referencing the old library. + +Package: libridl-java +Architecture: all +Section: oldlibs +Depends: ${java:Depends}, ${misc:Depends}, liblibreoffice-java +Replaces: ure (<< 6.4.0~rc1-6) +Breaks: ure (<< 6.4.0~rc1-6) +Description: LibreOffice UNO runtime environment -- Java Uno runtime and base types and types access library (compatibility library) + The Uno Runtime Environment (URE) is the well-known UNO component model + of LibreOffice, packaged up as an individual product. + . + This package formely contained the implementation of the base types for the + Java Uno typesystem, as well as a types access library. + . + This has now been merged into liblibreoffice-java but this package still exists + for compatibility with applications referencing the old library. + +Package: libunoloader-java +Architecture: all +Section: java +Depends: ${java:Depends}, ${misc:Depends} +Replaces: ure (<< 6.4.0~rc1-6) +Breaks: ure (<< 6.4.0~rc1-6) +Description: LibreOffice UNO runtime environment -- (Java) UNO loader + The Uno Runtime Environment (URE) is the well-known UNO component model + of LibreOffice, packaged up as an individual product. + . + This package contains a UNO loader library for Java. + +Package: libjurt-java +Architecture: all +Section: oldlibs +Depends: ${java:Depends}, ${misc:Depends}, liblibreoffice-java +Replaces: ure (<< 6.4.0~rc1-6) +Breaks: ure (<< 6.4.0~rc1-6) +Description: LibreOffice UNO runtime environment -- Java Uno Runtime (compatibility library) + The Uno Runtime Environment (URE) is the well-known UNO component model + of LibreOffice, packaged up as an individual product. + . + This package formerly contained the "Java Uno Runtime" and basically + implements Java Uno. + . + This has now been merged into liblibreoffice-java but this package still exists + for compatibility with applications referencing the old library. + +Package: liblibreoffice-java +Architecture: all +Section: java +Depends: ure, libunoloader-java, ${java:Depends}, ${misc:Depends} +Description: LibreOffice UNO runtime environment -- Java library + The Uno Runtime Environment (URE) is the well-known UNO component model + of LibreOffice, packaged up as an individual product. + . + This package contains the public Java libraries. + diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 00000000000..d94a9a86956 --- /dev/null +++ b/debian/copyright @@ -0,0 +1,293 @@ +Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: LibreOffice +Upstream-Contact: libreoffice@lists.freedesktop.org +Source: http://download.documentfoundation.org/libreoffice/src +# they are already removed when packing the upstream tarballs, but are in git... +#Files-Excluded: schema/*/* + +Files: * +Copyright: Copyright 2000, 2010 Oracle and/or its affiliates. + Copyright (c) 2000, 2010 LibreOffice contributors and/or their affiliates. +License: MPL-2.0 + On Debian systems the full text of the MPL-2.0 can be found in + /usr/share/common-licenses/MPL-2.0. + . + Some files include Apache-2.0 licensed material: + . + # This file incorporates work covered by the following license notice: + # + # Licensed to the Apache Software Foundation (ASF) under one or more + # contributor license agreements. See the NOTICE file distributed + # with this work for additional information regarding copyright + # ownership. The ASF licenses this file to you under the Apache + # License, Version 2.0 (the "License"); you may not use this file + # except in compliance with the License. You may obtain a copy of + # the License at http://www.apache.org/licenses/LICENSE-2.0 . + . + On Debian systems the full text of the Apache-2.0 license can be found in + /usr/share/common-licenses/Apache-2.0. + +Files: extras/source/truetype/symbol/OpenSymbol.sfd +Copyright: (c) 2009 Sun Microsystems Inc. + (c) 2010 Google Corporation + (c) 2011 Julien Nabet + (c) 2011 Olivier Hallot + (c) 2013 Mathias Hasselmann + (c) 2015 Khaled Hosny + (c) 2016 Mike Kaganski +License: MPL-2.0 + On Debian systems the full text of the MPL-2.0 can be found in + /usr/share/common-licenses/MPL-2.0. + . + Some files include Apache-2.0 licensed material: + . + # This file incorporates work covered by the following license notice: + # + # Licensed to the Apache Software Foundation (ASF) under one or more + # contributor license agreements. See the NOTICE file distributed + # with this work for additional information regarding copyright + # ownership. The ASF licenses this file to you under the Apache + # License, Version 2.0 (the "License"); you may not use this file + # except in compliance with the License. You may obtain a copy of + # the License at http://www.apache.org/licenses/LICENSE-2.0 . + . + On Debian systems the full text of the Apache-2.0 license can be found in + /usr/share/common-licenses/Apache-2.0. + +Files: swext/mediawiki/src/filter/odt2mediawiki.xsl +Copyright: Copyright (C) 2007-2013 Bernhard Haumacher (haui@haumacher.de) +License: Apache-2.0 + +Files: sysui/desktop/apparmor/* +Copyright: Copyright (C) 2016 Canonical Ltd. + Copyright (C) 2017 Software in the Public Interest, Inc. +License: MPL-2.0 + +Files: icon-themes/breeze*/* +Copyright: Copyright 2014 Uri Herrera + Copyright 2015 Andreas Kainz and other contributors +License: GPL-2+ + +Files: icon-themes/sifr*/* +Copyright: Jakub Steiner + Lapo Calamandrei + Hylke Bons + Barbara Muraus + Issa Alkurtass + Norah Abanumay + Copyright 2017-2018 Matthias Freund +License: CC-BY-SA-3.0 + +Files: icon_themes/elementary*/* +Copyright: Copyright 2015 by Simon Steinbeiss , Pasi Lallinaho +License: GPL-3+ + +Files: icon-themes/colibre*/* +Copyright: Copyright 2018 Andreas Kainz +License: CC0-1.0 + +https://github.com/rizmut/libreoffice-style-karasa-jaga/blob/master/COPYING +Files: icon-themes/karasa_jaga/* +Copyright: Copyright (c) 2014 Rizal Muttaqin +License: LGPL-3+ + +Files: icon_themes/sukapura*/* +Copyright: Copyright (c) 2019-2020 Rizal Muttaqin +License: MPL_2.0 + +Files: helpcontent2/help3xsl/fuse.js +Copyright: Copyright (c) 2012-2017 Kirollos Risk (http://kiro.me) +License: Apache-2.0 + +Files: helpcontent2/help3xsl/paginathing.js +Copyright: (C) 2018 Alfred Crosby +License: Expat + +Files: helpcontent2/help3xsl/normalize.css +Copyright: Copyright © Nicolas Gallagher and Jonathan Neal +License: Expat + +Files: helpcontent2/help3xsl/fuzzysort.js +Copyright: Copyright (c) 2018 Stephen Kamenar +License: Expat + +Files: debian/* +Copyright: Copyright (C) 2002-2009 Software in the Public Interest, Inc. +License: GPL-2 + +Files: debian/scripts/get_ttf_version.pl +Copyright: Copyright (C) 2015 Software in the Public Interest, Inc. +License: MPL-2.0 + +Files: debian/templates/debian-presentation.otp +Copyright: Copyright (C) 2010 Raphaël Hertzog +License: GPL-2+ + +Files: debian/templates/debian-presentation-background.xcf +Copyright: Copyright Alexis Younes "ayo" +License: GPL-2+ + +Files: tarballs/*dtoa* +Copyright: Copyright (c) 1991, 2000, 2001 by Lucent Technologies. +License: Expat + +# https://github.com/google/skia/blob/master/LICENSE +Files: tarballs/*skia* +Copyright: Copyright (c) 2011 Google Inc. +License: BSD-3-clause + +Files: tarballs/*rhino* +Copyright: Copyright (C) 1997-2000 Netscape Communications Corporation + Copyright (C) 2000 See Beyond Communications Corporation +License: MPL-1.1 or GPL-2 or LGPL-2 + +Files: tarballs/*xsltml* +Copyright: Copyright (C) 2001-2003 Vasil Yaroshevich +License: other + Permission is hereby granted, free of charge, to any person + obtaining a copy of this software and associated documentation + files (the ``Software''), to deal in the Software without + restriction, including without limitation the rights to use, + copy, modify, merge, publish, distribute, sublicense, and/or + sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following + conditions: + . + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + . + Except as contained in this notice, the names of individuals + credited with contribution to this software shall not be used in + advertising or otherwise to promote the sale, use or other + dealings in this Software without prior written authorization + from the individuals in question. + . + Any stylesheet derived from this Software that is publically + distributed will be identified with a different name and the + version strings in any derived Software will be changed so that + no possibility of confusion between the derived package and this + Software will exist. + +Files: tarballs/*swingEx* +Copyright: Copyright 2008 by Sun Microsystems, Inc. +License: LGPL-3 + On Debian systems the full text of the LGPL-3 can be found in + /usr/share/common-licenses/LGPL-3 + +Files: tarballs/*pdfium* +Copyright: // Copyright 2014-2016 PDFium Authors. + // Original code copyright 2014 Foxit Software Inc. +License: other + // Redistribution and use in source and binary forms, with or without + // modification, are permitted provided that the following conditions are + // met: + // + // * Redistributions of source code must retain the above copyright + // notice, this list of conditions and the following disclaimer. + // * Redistributions in binary form must reproduce the above + // copyright notice, this list of conditions and the following disclaimer + // in the documentation and/or other materials provided with the + // distribution. + // * Neither the name of Google Inc. nor the names of its + // contributors may be used to endorse or promote products derived from + // this software without specific prior written permission. + // + // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Files: debian/patches/add-access2base-doc.diff wizards/source/access2base/access2base.html +License: other +Copyright: Copyright (c) Jeremy Ruston 2004-2007 + Copyright (c) UnaMesa Association 2007-2012 +License: other + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + . + Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + . + Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or other + materials provided with the distribution. + . + Neither the name of the UnaMesa Association nor the names of its contributors may be + used to endorse or promote products derived from this software without specific + prior written permission. + . + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' AND ANY + EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + DAMAGE. + +License: Expat + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + . + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + . + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +License: MPL-2.0 + On Debian systems the full text of the MPL-2.0 can be found in + /usr/share/common-licenses/MPL-2.0. + +License: Apache-2.0 + On Debian systems the full text of the Apache-2.0 license can be found in + /usr/share/common-licenses/Apache-2.0. + +License: GPL-2+ + On Debian systems the full text of the GPL-2 can be found in + /usr/share/common-licenses/GPL-2 + +License: GPL-3+ + On Debian systems the full text of the GPL-3 can be found in + /usr/share/common-licenses/GPL-3 + +License: GPL-2 + On Debian systems the full text of the GPL-2 can be found in + /usr/share/common-licenses/GPL-2 + +License: MPL-1.1 + On Debian systems the full text of the MPL-1.1 can be found in + /usr/share/common-licenses/MPL-1.1 + +License: LGPL-2 + On Debian systems the full text of the LGPL-2 can be found in + /usr/share/common-licenses/LGPL-2 + +License: LGPL-3+ + On Debian systems the full text of the LGPL-3 can be found in + /usr/share/common-licenses/LGPL-3 + +License: CC0-1.0 + On Debian systems the full text of the CC0-1.0 license can be found in + /usr/share/common-licenses/CC0-1.0 + + diff --git a/debian/gir1.2-lokdocview-0.1.maintscript b/debian/gir1.2-lokdocview-0.1.maintscript new file mode 100644 index 00000000000..af2542fa92b --- /dev/null +++ b/debian/gir1.2-lokdocview-0.1.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/gir1.2-lokdocview-0.1 /usr/share/doc/libreoffice-core 1:6.4.0~alpha1~git20191013 diff --git a/debian/libjuh-java.lintian-overrides b/debian/libjuh-java.lintian-overrides new file mode 100644 index 00000000000..6b27b4f14ac --- /dev/null +++ b/debian/libjuh-java.lintian-overrides @@ -0,0 +1 @@ +libjuh-java: codeless-jar usr/share/java/juh-*.jar diff --git a/debian/libjuh-java.poms b/debian/libjuh-java.poms new file mode 100644 index 00000000000..78b7ec145c5 --- /dev/null +++ b/debian/libjuh-java.poms @@ -0,0 +1,28 @@ +# List of POM files for the package +# Format of this file is: +# [option]* +# where option can be: +# --ignore: ignore this POM and its artifact if any +# --ignore-pom: don't install the POM. To use on POM files that are created +# temporarily for certain artifacts such as Javadoc jars. [mh_install, mh_installpoms] +# --no-parent: remove the tag from the POM +# --package=: an alternative package to use when installing this POM +# and its artifact +# --has-package-version: to indicate that the original version of the POM is the same as the upstream part +# of the version for the package. +# --keep-elements=: a list of XML elements to keep in the POM +# during a clean operation with mh_cleanpom or mh_installpom +# --artifact=: path to the build artifact associated with this POM, +# it will be installed when using the command mh_install. [mh_install] +# --java-lib: install the jar into /usr/share/java to comply with Debian +# packaging guidelines +# --usj-name=: name to use when installing the library in /usr/share/java +# --usj-version=: version to use when installing the library in /usr/share/java +# --no-usj-versionless: don't install the versionless link in /usr/share/java +# --dest-jar=: the destination for the real jar. +# It will be installed with mh_install. [mh_install] +# --classifier=: Optional, the classifier for the jar. Empty by default. +# --site-xml=: Optional, the location for site.xml if it needs to be installed. +# Empty by default. [mh_install] +# +debian/pom.juh.xml --no-parent --has-package-version diff --git a/debian/libjurt-java.lintian-overrides b/debian/libjurt-java.lintian-overrides new file mode 100644 index 00000000000..4af0a88a8dd --- /dev/null +++ b/debian/libjurt-java.lintian-overrides @@ -0,0 +1 @@ +libjurt-java: codeless-jar usr/share/java/jurt-*.jar diff --git a/debian/libjurt-java.poms b/debian/libjurt-java.poms new file mode 100644 index 00000000000..2bc6296377a --- /dev/null +++ b/debian/libjurt-java.poms @@ -0,0 +1,28 @@ +# List of POM files for the package +# Format of this file is: +# [option]* +# where option can be: +# --ignore: ignore this POM and its artifact if any +# --ignore-pom: don't install the POM. To use on POM files that are created +# temporarily for certain artifacts such as Javadoc jars. [mh_install, mh_installpoms] +# --no-parent: remove the tag from the POM +# --package=: an alternative package to use when installing this POM +# and its artifact +# --has-package-version: to indicate that the original version of the POM is the same as the upstream part +# of the version for the package. +# --keep-elements=: a list of XML elements to keep in the POM +# during a clean operation with mh_cleanpom or mh_installpom +# --artifact=: path to the build artifact associated with this POM, +# it will be installed when using the command mh_install. [mh_install] +# --java-lib: install the jar into /usr/share/java to comply with Debian +# packaging guidelines +# --usj-name=: name to use when installing the library in /usr/share/java +# --usj-version=: version to use when installing the library in /usr/share/java +# --no-usj-versionless: don't install the versionless link in /usr/share/java +# --dest-jar=: the destination for the real jar. +# It will be installed with mh_install. [mh_install] +# --classifier=: Optional, the classifier for the jar. Empty by default. +# --site-xml=: Optional, the location for site.xml if it needs to be installed. +# Empty by default. [mh_install] +# +debian/pom.jurt.xml --no-parent --has-package-version diff --git a/debian/liblibreoffice-java.poms b/debian/liblibreoffice-java.poms new file mode 100644 index 00000000000..dcd4c61db52 --- /dev/null +++ b/debian/liblibreoffice-java.poms @@ -0,0 +1,28 @@ +# List of POM files for the package +# Format of this file is: +# [option]* +# where option can be: +# --ignore: ignore this POM and its artifact if any +# --ignore-pom: don't install the POM. To use on POM files that are created +# temporarily for certain artifacts such as Javadoc jars. [mh_install, mh_installpoms] +# --no-parent: remove the tag from the POM +# --package=: an alternative package to use when installing this POM +# and its artifact +# --has-package-version: to indicate that the original version of the POM is the same as the upstream part +# of the version for the package. +# --keep-elements=: a list of XML elements to keep in the POM +# during a clean operation with mh_cleanpom or mh_installpom +# --artifact=: path to the build artifact associated with this POM, +# it will be installed when using the command mh_install. [mh_install] +# --java-lib: install the jar into /usr/share/java to comply with Debian +# packaging guidelines +# --usj-name=: name to use when installing the library in /usr/share/java +# --usj-version=: version to use when installing the library in /usr/share/java +# --no-usj-versionless: don't install the versionless link in /usr/share/java +# --dest-jar=: the destination for the real jar. +# It will be installed with mh_install. [mh_install] +# --classifier=: Optional, the classifier for the jar. Empty by default. +# --site-xml=: Optional, the location for site.xml if it needs to be installed. +# Empty by default. [mh_install] +# +debian/pom.libreoffice.xml --no-parent --has-package-version diff --git a/debian/liblibreofficekitgtk.links b/debian/liblibreofficekitgtk.links new file mode 100644 index 00000000000..c8017de61d1 --- /dev/null +++ b/debian/liblibreofficekitgtk.links @@ -0,0 +1 @@ +usr/lib/libreoffice/program/liblibreofficekitgtk.so usr/lib/liblibreofficekitgtk.so diff --git a/debian/liblibreofficekitgtk.maintscript b/debian/liblibreofficekitgtk.maintscript new file mode 100644 index 00000000000..bc4fa417f62 --- /dev/null +++ b/debian/liblibreofficekitgtk.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/liblibreofficekitgtk /usr/share/doc/libreoffice-core 1:6.4.0~alpha1~git20191013 diff --git a/debian/libofficebean-java.poms b/debian/libofficebean-java.poms new file mode 100644 index 00000000000..36e613aa9ae --- /dev/null +++ b/debian/libofficebean-java.poms @@ -0,0 +1,28 @@ +# List of POM files for the package +# Format of this file is: +# [option]* +# where option can be: +# --ignore: ignore this POM and its artifact if any +# --ignore-pom: don't install the POM. To use on POM files that are created +# temporarily for certain artifacts such as Javadoc jars. [mh_install, mh_installpoms] +# --no-parent: remove the tag from the POM +# --package=: an alternative package to use when installing this POM +# and its artifact +# --has-package-version: to indicate that the original version of the POM is the same as the upstream part +# of the version for the package. +# --keep-elements=: a list of XML elements to keep in the POM +# during a clean operation with mh_cleanpom or mh_installpom +# --artifact=: path to the build artifact associated with this POM, +# it will be installed when using the command mh_install. [mh_install] +# --java-lib: install the jar into /usr/share/java to comply with Debian +# packaging guidelines +# --usj-name=: name to use when installing the library in /usr/share/java +# --usj-version=: version to use when installing the library in /usr/share/java +# --no-usj-versionless: don't install the versionless link in /usr/share/java +# --dest-jar=: the destination for the real jar. +# It will be installed with mh_install. [mh_install] +# --classifier=: Optional, the classifier for the jar. Empty by default. +# --site-xml=: Optional, the location for site.xml if it needs to be installed. +# Empty by default. [mh_install] +# +debian/pom.officebean.xml --no-parent --has-package-version diff --git a/debian/libreoffice-avmedia-backend-gstreamer.maintscript b/debian/libreoffice-avmedia-backend-gstreamer.maintscript new file mode 100644 index 00000000000..b89fd7bd09a --- /dev/null +++ b/debian/libreoffice-avmedia-backend-gstreamer.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-avmedia-backend-gstreamer /usr/share/doc/libreoffice-core 1:6.4.0~alpha1~git20191013 diff --git a/debian/libreoffice-base-core.maintscript b/debian/libreoffice-base-core.maintscript new file mode 100644 index 00000000000..de6bf069418 --- /dev/null +++ b/debian/libreoffice-base-core.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-base-core /usr/share/doc/libreoffice-core 1:6.4.0~alpha1~git20191013 diff --git a/debian/libreoffice-base-drivers.NEWS b/debian/libreoffice-base-drivers.NEWS new file mode 100644 index 00000000000..0a0b922f8f2 --- /dev/null +++ b/debian/libreoffice-base-drivers.NEWS @@ -0,0 +1,14 @@ +libreoffice (1:6.1.3-2) unstable; urgency=low + + * The JDBC Driver used for JDBC Access by the LibreOffice MySQL driver + (NOT libreoffice-mysql-connector) contained in this package has been + changed from MySQL to MariaDB (libmysql-java -> libmariadb-java). See + http://bugs.debian.org/913360 and https://bugs.debian.org/912916. + + This also involves changing the classes used in the code, so using + libmysql-java and com.mysql.jdbc.Driver does not work anymore. + + If you want to connect to MySQL or MariaDB databases over JDBC, use + libmariadb-java. + + -- Rene Engelhard Fri, 16 Nov 2018 19:35:22 +0100 diff --git a/debian/libreoffice-base-drivers.maintscript b/debian/libreoffice-base-drivers.maintscript new file mode 100644 index 00000000000..a2c6bc2d038 --- /dev/null +++ b/debian/libreoffice-base-drivers.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-base-drivers /usr/share/doc/libreoffice-core 1:6.4.0~alpha1~git20191013 diff --git a/debian/libreoffice-base-nogui.bug-control b/debian/libreoffice-base-nogui.bug-control new file mode 100644 index 00000000000..31f42c1f1f7 --- /dev/null +++ b/debian/libreoffice-base-nogui.bug-control @@ -0,0 +1,2 @@ +report-with: libreoffice-core +package-status: unixodbc libmyodbc odbc-postgresql libsqliteodbc tdsodbc mdbtools libmariadb-java libmysql-java libpg-java libsapdbc-java diff --git a/debian/libreoffice-base-nogui.mime b/debian/libreoffice-base-nogui.mime new file mode 100644 index 00000000000..3174fccf851 --- /dev/null +++ b/debian/libreoffice-base-nogui.mime @@ -0,0 +1,11 @@ +### +# shared-mime-info + +# OASIS OpenDocument Format +application/vnd.oasis.opendocument.database; soffice --nologo --base %s; edit=soffice --nologo --base %s; print=soffice --nologo --base -p %s; test=test -n "$DISPLAY"; description="OpenDocument Database"; nametemplate=%s.odb; priority=9 + +# OpenOffice.org 1.0 +application/vnd.sun.xml.base; soffice --nologo --writer %s; edit=soffice --nologo --writer %s; description="OpenOffice.org Database"; nametemplate=%s.sdb; priority=8 + +# +### diff --git a/debian/libreoffice-base-nogui.ucf b/debian/libreoffice-base-nogui.ucf new file mode 100644 index 00000000000..79c8af29cd5 --- /dev/null +++ b/debian/libreoffice-base-nogui.ucf @@ -0,0 +1 @@ +/usr/lib/libreoffice/share/.registry/base.xcd /etc/libreoffice/registry/base.xcd diff --git a/debian/libreoffice-base.NEWS b/debian/libreoffice-base.NEWS new file mode 100644 index 00000000000..b7a30f1a0e0 --- /dev/null +++ b/debian/libreoffice-base.NEWS @@ -0,0 +1,14 @@ +libreoffice (1:4.2.1-1) experimental; urgency=low + + * the database drivers have been split out to a new libreoffice-base-drivers + package. This package depends on most of them, but that explicitly + _does not_ include the HSQLDB SDBC Driver or the new Firebird SDBC Driver + (both for the embedded database) - whose because of their dependencies are + split into extra packages. + . + If you used a "normal" embedded database in your (old) database file you + _must_ install libreoffice-sdbc-hsqldb so that it can "connect" to it. + . + Similar with the new Firebird embedded database in 4.2 and -sdbc-firebird. + + -- Rene Engelhard Fri, 16 Aug 2013 10:21:53 +0200 diff --git a/debian/libreoffice-base.bug-control b/debian/libreoffice-base.bug-control new file mode 100644 index 00000000000..31f42c1f1f7 --- /dev/null +++ b/debian/libreoffice-base.bug-control @@ -0,0 +1,2 @@ +report-with: libreoffice-core +package-status: unixodbc libmyodbc odbc-postgresql libsqliteodbc tdsodbc mdbtools libmariadb-java libmysql-java libpg-java libsapdbc-java diff --git a/debian/libreoffice-base.lintian-overrides b/debian/libreoffice-base.lintian-overrides new file mode 100644 index 00000000000..d1500e8d835 --- /dev/null +++ b/debian/libreoffice-base.lintian-overrides @@ -0,0 +1 @@ +libreoffice-base: desktop-command-not-in-package usr/share/applications/libreoffice-base.desktop libreoffice diff --git a/debian/libreoffice-base.maintscript b/debian/libreoffice-base.maintscript new file mode 100644 index 00000000000..14d5ac448c5 --- /dev/null +++ b/debian/libreoffice-base.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-base /usr/share/doc/libreoffice-core 1:6.4.0~alpha1~git20191013 diff --git a/debian/libreoffice-base.manpages b/debian/libreoffice-base.manpages new file mode 100644 index 00000000000..144eec74763 --- /dev/null +++ b/debian/libreoffice-base.manpages @@ -0,0 +1 @@ +debian/tmp/usr/share/man/man1/lobase.1.gz diff --git a/debian/libreoffice-base.mime b/debian/libreoffice-base.mime new file mode 100644 index 00000000000..3174fccf851 --- /dev/null +++ b/debian/libreoffice-base.mime @@ -0,0 +1,11 @@ +### +# shared-mime-info + +# OASIS OpenDocument Format +application/vnd.oasis.opendocument.database; soffice --nologo --base %s; edit=soffice --nologo --base %s; print=soffice --nologo --base -p %s; test=test -n "$DISPLAY"; description="OpenDocument Database"; nametemplate=%s.odb; priority=9 + +# OpenOffice.org 1.0 +application/vnd.sun.xml.base; soffice --nologo --writer %s; edit=soffice --nologo --writer %s; description="OpenOffice.org Database"; nametemplate=%s.sdb; priority=8 + +# +### diff --git a/debian/libreoffice-base.preinst.in b/debian/libreoffice-base.preinst.in new file mode 100644 index 00000000000..08ab83ab0ba --- /dev/null +++ b/debian/libreoffice-base.preinst.in @@ -0,0 +1,21 @@ +#!/bin/sh + +set -e + +#INCLUDE_SHELL_LIB# + +if [ upgrade = "$1" ] || dpkg --compare-versions "$2" lt 1:6.4.0~beta1-2; then + dpkg-divert --remove --no-rename \ + --divert /usr/lib/libreoffice/share/basic/dialog.xlc.noaccess \ + /usr/lib/libreoffice/share/basic/dialog.xlc + dpkg-divert --remove --no-rename \ + --divert /usr/lib/libreoffice/share/basic/script.xlc.noaccess \ + /usr/lib/libreoffice/share/basic/script.xlc + # cleanup + rm -f /usr/lib/libreoffice/share/basic/script.xlc.noaccess + rm -f /usr/lib/libreoffice/share/basic/dialog.xlc.noaccess +fi + +#DEBHELPER# + +exit 0 diff --git a/debian/libreoffice-base.ucf b/debian/libreoffice-base.ucf new file mode 100644 index 00000000000..79c8af29cd5 --- /dev/null +++ b/debian/libreoffice-base.ucf @@ -0,0 +1 @@ +/usr/lib/libreoffice/share/.registry/base.xcd /etc/libreoffice/registry/base.xcd diff --git a/debian/libreoffice-calc-nogui.lintian-overrides b/debian/libreoffice-calc-nogui.lintian-overrides new file mode 100644 index 00000000000..630bb42ecd4 --- /dev/null +++ b/debian/libreoffice-calc-nogui.lintian-overrides @@ -0,0 +1 @@ +libreoffice-calc-nogui: binary-or-shlib-defines-rpath diff --git a/debian/libreoffice-calc-nogui.mime b/debian/libreoffice-calc-nogui.mime new file mode 100644 index 00000000000..d306e622514 --- /dev/null +++ b/debian/libreoffice-calc-nogui.mime @@ -0,0 +1,37 @@ +### +# shared-mime-info + +# Generic +text/csv; soffice --nologo --calc %s; edit=soffice --nologo --calc %s; test=test -n "$DISPLAY"; description="CSV Document"; nametemplate=%s.csv; priority=3 +text/spreadsheet; soffice --nologo --calc %s; edit=soffice --nologo --calc %s; test=test -n "$DISPLAY"; description="Spreadsheet Interchange Document"; nametemplate=%s.slk; priority=3 + +# Corel Quattro Pro +application/x-quattropro; soffice --nologo --calc %s; edit=soffice --nologo --calc %s; test=test -n "$DISPLAY"; description="Quattro Pro 6 for Windows Spreadsheet"; nametemplate=%s.wb2; priority=3 + +# dBase dBASE +application/x-dbf; soffice --nologo --calc %s; edit=soffice --nologo --calc %s; test=test -n "$DISPLAY"; description="xBase Document"; nametemplate=%s.dbf; priority=3 + +# ECMA Office Open XML (Microsoft Office 2007) +application/vnd.ms-excel.sheet.macroEnabled.12; soffice --nologo --calc %s; edit=soffice --nologo --calc %s; test=test -n "$DISPLAY"; description="Office Open XML Spreadsheet with Macros Enabled"; nametemplate=%s.xlsm; priority=3 +application/vnd.ms-excel.template.macroEnabled.12; soffice --nologo --calc %s; edit=soffice --nologo --calc %s; test=test -n "$DISPLAY"; description="Office Open XML Spreadsheet Template with Macros Enabled"; nametemplate=%s.xltm; priority=3 +application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; soffice --nologo --calc %s; edit=soffice --nologo --calc %s; test=test -n "$DISPLAY"; description="Office Open XML Spreadsheet"; nametemplate=%s.xlsx; priority=3 +application/vnd.openxmlformats-officedocument.spreadsheetml.template; soffice --nologo --calc %s; edit=soffice --nologo --calc %s; test=test -n "$DISPLAY"; description="Office Open XML Spreadsheet Template"; nametemplate=%s.xltx; priority=3 + +# IBM Lotus 1-2-3 +application/vnd.lotus-1-2-3; soffice --nologo --calc %s; edit=soffice --nologo --calc %s; test=test -n "$DISPLAY"; description="Lotus 1-2-3 spreadsheet"; nametemplate=%s.123; priority=3 + +# Microsoft Excel +application/vnd.ms-excel; soffice --nologo --calc %s; edit=soffice --nologo --calc %s; test=test -n "$DISPLAY"; description="Microsoft Excel Document"; nametemplate=%s.xls; priority=3 + +# OASIS OpenDocument Format +application/vnd.oasis.opendocument.chart; soffice --nologo --calc %s; edit=soffice --nologo --calc %s; print=soffice --nologo --calc -p %s; test=test -n "$DISPLAY"; description="OpenDocument Chart"; nametemplate=%s.odc; priority=9 +application/vnd.oasis.opendocument.spreadsheet; soffice --nologo --calc %s; edit=soffice --nologo --calc %s; print=soffice --nologo --calc -p %s; test=test -n "$DISPLAY"; description="OpenDocument Spreadsheet"; nametemplate=%s.ods; priority=9 +application/vnd.oasis.opendocument.spreadsheet-template; soffice --nologo --calc %s; edit=soffice --nologo --calc %s; print=soffice --nologo --calc -p %s; test=test -n "$DISPLAY"; description="OpenDocument Spreadsheet Template"; nametemplate=%s.ots; priority=9 + +# OpenOffice.org 1.0 +application/vnd.sun.xml.calc; soffice --nologo --calc %s; edit=soffice --nologo --calc %s; test=test -n "$DISPLAY"; description="OpenOffice.org Spreadsheet"; nametemplate=%s.sxc; priority=8 +application/vnd.sun.xml.calc.template; soffice --nologo --calc %s; edit=soffice --nologo --calc %s; test=test -n "$DISPLAY"; description="OpenOffice.org Spreadsheet Template"; nametemplate=%s.stc; priority=8 + +# +### + diff --git a/debian/libreoffice-calc-nogui.ucf b/debian/libreoffice-calc-nogui.ucf new file mode 100644 index 00000000000..4820977edc1 --- /dev/null +++ b/debian/libreoffice-calc-nogui.ucf @@ -0,0 +1 @@ +/usr/lib/libreoffice/share/.registry/calc.xcd /etc/libreoffice/registry/calc.xcd diff --git a/debian/libreoffice-calc.bug-control b/debian/libreoffice-calc.bug-control new file mode 100644 index 00000000000..1ac405f9788 --- /dev/null +++ b/debian/libreoffice-calc.bug-control @@ -0,0 +1 @@ +report-with: libreoffice-core diff --git a/debian/libreoffice-calc.lintian-overrides b/debian/libreoffice-calc.lintian-overrides new file mode 100644 index 00000000000..004fc535988 --- /dev/null +++ b/debian/libreoffice-calc.lintian-overrides @@ -0,0 +1,2 @@ +libreoffice-calc: binary-or-shlib-defines-rpath +libreoffice-calc: desktop-command-not-in-package usr/share/applications/libreoffice-calc.desktop libreoffice diff --git a/debian/libreoffice-calc.maintscript b/debian/libreoffice-calc.maintscript new file mode 100644 index 00000000000..859933b7271 --- /dev/null +++ b/debian/libreoffice-calc.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-calc /usr/share/doc/libreoffice-core 1:6.4.0~alpha1~git20191013 diff --git a/debian/libreoffice-calc.manpages b/debian/libreoffice-calc.manpages new file mode 100644 index 00000000000..a4b78ee3406 --- /dev/null +++ b/debian/libreoffice-calc.manpages @@ -0,0 +1,2 @@ +debian/tmp/usr/share/man/man1/localc.1.gz + diff --git a/debian/libreoffice-calc.mime b/debian/libreoffice-calc.mime new file mode 100644 index 00000000000..d306e622514 --- /dev/null +++ b/debian/libreoffice-calc.mime @@ -0,0 +1,37 @@ +### +# shared-mime-info + +# Generic +text/csv; soffice --nologo --calc %s; edit=soffice --nologo --calc %s; test=test -n "$DISPLAY"; description="CSV Document"; nametemplate=%s.csv; priority=3 +text/spreadsheet; soffice --nologo --calc %s; edit=soffice --nologo --calc %s; test=test -n "$DISPLAY"; description="Spreadsheet Interchange Document"; nametemplate=%s.slk; priority=3 + +# Corel Quattro Pro +application/x-quattropro; soffice --nologo --calc %s; edit=soffice --nologo --calc %s; test=test -n "$DISPLAY"; description="Quattro Pro 6 for Windows Spreadsheet"; nametemplate=%s.wb2; priority=3 + +# dBase dBASE +application/x-dbf; soffice --nologo --calc %s; edit=soffice --nologo --calc %s; test=test -n "$DISPLAY"; description="xBase Document"; nametemplate=%s.dbf; priority=3 + +# ECMA Office Open XML (Microsoft Office 2007) +application/vnd.ms-excel.sheet.macroEnabled.12; soffice --nologo --calc %s; edit=soffice --nologo --calc %s; test=test -n "$DISPLAY"; description="Office Open XML Spreadsheet with Macros Enabled"; nametemplate=%s.xlsm; priority=3 +application/vnd.ms-excel.template.macroEnabled.12; soffice --nologo --calc %s; edit=soffice --nologo --calc %s; test=test -n "$DISPLAY"; description="Office Open XML Spreadsheet Template with Macros Enabled"; nametemplate=%s.xltm; priority=3 +application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; soffice --nologo --calc %s; edit=soffice --nologo --calc %s; test=test -n "$DISPLAY"; description="Office Open XML Spreadsheet"; nametemplate=%s.xlsx; priority=3 +application/vnd.openxmlformats-officedocument.spreadsheetml.template; soffice --nologo --calc %s; edit=soffice --nologo --calc %s; test=test -n "$DISPLAY"; description="Office Open XML Spreadsheet Template"; nametemplate=%s.xltx; priority=3 + +# IBM Lotus 1-2-3 +application/vnd.lotus-1-2-3; soffice --nologo --calc %s; edit=soffice --nologo --calc %s; test=test -n "$DISPLAY"; description="Lotus 1-2-3 spreadsheet"; nametemplate=%s.123; priority=3 + +# Microsoft Excel +application/vnd.ms-excel; soffice --nologo --calc %s; edit=soffice --nologo --calc %s; test=test -n "$DISPLAY"; description="Microsoft Excel Document"; nametemplate=%s.xls; priority=3 + +# OASIS OpenDocument Format +application/vnd.oasis.opendocument.chart; soffice --nologo --calc %s; edit=soffice --nologo --calc %s; print=soffice --nologo --calc -p %s; test=test -n "$DISPLAY"; description="OpenDocument Chart"; nametemplate=%s.odc; priority=9 +application/vnd.oasis.opendocument.spreadsheet; soffice --nologo --calc %s; edit=soffice --nologo --calc %s; print=soffice --nologo --calc -p %s; test=test -n "$DISPLAY"; description="OpenDocument Spreadsheet"; nametemplate=%s.ods; priority=9 +application/vnd.oasis.opendocument.spreadsheet-template; soffice --nologo --calc %s; edit=soffice --nologo --calc %s; print=soffice --nologo --calc -p %s; test=test -n "$DISPLAY"; description="OpenDocument Spreadsheet Template"; nametemplate=%s.ots; priority=9 + +# OpenOffice.org 1.0 +application/vnd.sun.xml.calc; soffice --nologo --calc %s; edit=soffice --nologo --calc %s; test=test -n "$DISPLAY"; description="OpenOffice.org Spreadsheet"; nametemplate=%s.sxc; priority=8 +application/vnd.sun.xml.calc.template; soffice --nologo --calc %s; edit=soffice --nologo --calc %s; test=test -n "$DISPLAY"; description="OpenOffice.org Spreadsheet Template"; nametemplate=%s.stc; priority=8 + +# +### + diff --git a/debian/libreoffice-calc.ucf b/debian/libreoffice-calc.ucf new file mode 100644 index 00000000000..4820977edc1 --- /dev/null +++ b/debian/libreoffice-calc.ucf @@ -0,0 +1 @@ +/usr/lib/libreoffice/share/.registry/calc.xcd /etc/libreoffice/registry/calc.xcd diff --git a/debian/libreoffice-common.bug-control b/debian/libreoffice-common.bug-control new file mode 100644 index 00000000000..38da481c1f2 --- /dev/null +++ b/debian/libreoffice-common.bug-control @@ -0,0 +1 @@ +report-with: python-uno python3-uno diff --git a/debian/libreoffice-common.docs b/debian/libreoffice-common.docs new file mode 100644 index 00000000000..e2675791300 --- /dev/null +++ b/debian/libreoffice-common.docs @@ -0,0 +1 @@ +wizards/source/access2base/access2base.html diff --git a/debian/libreoffice-common.links.in b/debian/libreoffice-common.links.in new file mode 100644 index 00000000000..8365f3eefbf --- /dev/null +++ b/debian/libreoffice-common.links.in @@ -0,0 +1,37 @@ +usr/share/icons/hicolor/16x16/mimetypes/libreoffice-oasis-database.png usr/share/icons/hicolor/16x16/mimetypes/application-vnd.oasis.opendocument.database.png +usr/share/icons/hicolor/16x16/mimetypes/libreoffice-oasis-drawing.png usr/share/icons/hicolor/16x16/mimetypes/application-vnd.oasis.opendocument.drawing.png +usr/share/icons/hicolor/16x16/mimetypes/libreoffice-oasis-drawing-template.png usr/share/icons/hicolor/16x16/mimetypes/application-vnd.oasis.opendocument.drawing-template.png +usr/share/icons/hicolor/16x16/mimetypes/libreoffice-oasis-formula.png usr/share/icons/hicolor/16x16/mimetypes/application-vnd.oasis.opendocument.formula.png +usr/share/icons/hicolor/16x16/mimetypes/libreoffice-oasis-master-document.png usr/share/icons/hicolor/16x16/mimetypes/application-vnd.oasis.opendocument.master-document.png +usr/share/icons/hicolor/16x16/mimetypes/libreoffice-oasis-presentation.png usr/share/icons/hicolor/16x16/mimetypes/application-vnd.oasis.opendocument.presentation.png +usr/share/icons/hicolor/16x16/mimetypes/libreoffice-oasis-presentation-template.png usr/share/icons/hicolor/16x16/mimetypes/application-vnd.oasis.opendocument.presentation-template.png +usr/share/icons/hicolor/16x16/mimetypes/libreoffice-oasis-spreadsheet.png usr/share/icons/hicolor/16x16/mimetypes/application-vnd.oasis.opendocument.spreadsheet.png +usr/share/icons/hicolor/16x16/mimetypes/libreoffice-oasis-spreadsheet-template.png usr/share/icons/hicolor/16x16/mimetypes/application-vnd.oasis.opendocument.spreadsheet-template.png +usr/share/icons/hicolor/16x16/mimetypes/libreoffice-oasis-text.png usr/share/icons/hicolor/16x16/mimetypes/application-vnd.oasis.opendocument.text.png +usr/share/icons/hicolor/16x16/mimetypes/libreoffice-oasis-text-template.png usr/share/icons/hicolor/16x16/mimetypes/application-vnd.oasis.opendocument.text-template.png +usr/share/icons/hicolor/16x16/mimetypes/libreoffice-oasis-web-template.png usr/share/icons/hicolor/16x16/mimetypes/application-vnd.oasis.opendocument.web-template.png +usr/share/icons/hicolor/32x32/mimetypes/libreoffice-oasis-database.png usr/share/icons/hicolor/32x32/mimetypes/application-vnd.oasis.opendocument.database.png +usr/share/icons/hicolor/32x32/mimetypes/libreoffice-oasis-drawing.png usr/share/icons/hicolor/32x32/mimetypes/application-vnd.oasis.opendocument.drawing.png +usr/share/icons/hicolor/32x32/mimetypes/libreoffice-oasis-drawing-template.png usr/share/icons/hicolor/32x32/mimetypes/application-vnd.oasis.opendocument.drawing-template.png +usr/share/icons/hicolor/32x32/mimetypes/libreoffice-oasis-formula.png usr/share/icons/hicolor/32x32/mimetypes/application-vnd.oasis.opendocument.formula.png +usr/share/icons/hicolor/32x32/mimetypes/libreoffice-oasis-master-document.png usr/share/icons/hicolor/32x32/mimetypes/application-vnd.oasis.opendocument.master-document.png +usr/share/icons/hicolor/32x32/mimetypes/libreoffice-oasis-presentation.png usr/share/icons/hicolor/32x32/mimetypes/application-vnd.oasis.opendocument.presentation.png +usr/share/icons/hicolor/32x32/mimetypes/libreoffice-oasis-presentation-template.png usr/share/icons/hicolor/32x32/mimetypes/application-vnd.oasis.opendocument.presentation-template.png +usr/share/icons/hicolor/32x32/mimetypes/libreoffice-oasis-spreadsheet.png usr/share/icons/hicolor/32x32/mimetypes/application-vnd.oasis.opendocument.spreadsheet.png +usr/share/icons/hicolor/32x32/mimetypes/libreoffice-oasis-spreadsheet-template.png usr/share/icons/hicolor/32x32/mimetypes/application-vnd.oasis.opendocument.spreadsheet-template.png +usr/share/icons/hicolor/32x32/mimetypes/libreoffice-oasis-text.png usr/share/icons/hicolor/32x32/mimetypes/application-vnd.oasis.opendocument.text.png +usr/share/icons/hicolor/32x32/mimetypes/libreoffice-oasis-text-template.png usr/share/icons/hicolor/32x32/mimetypes/application-vnd.oasis.opendocument.text-template.png +usr/share/icons/hicolor/32x32/mimetypes/libreoffice-oasis-web-template.png usr/share/icons/hicolor/32x32/mimetypes/application-vnd.oasis.opendocument.web-template.png +usr/share/icons/hicolor/48x48/mimetypes/libreoffice-oasis-database.png usr/share/icons/hicolor/48x48/mimetypes/application-vnd.oasis.opendocument.database.png +usr/share/icons/hicolor/48x48/mimetypes/libreoffice-oasis-drawing.png usr/share/icons/hicolor/48x48/mimetypes/application-vnd.oasis.opendocument.drawing.png +usr/share/icons/hicolor/48x48/mimetypes/libreoffice-oasis-drawing-template.png usr/share/icons/hicolor/48x48/mimetypes/application-vnd.oasis.opendocument.drawing-template.png +usr/share/icons/hicolor/48x48/mimetypes/libreoffice-oasis-formula.png usr/share/icons/hicolor/48x48/mimetypes/application-vnd.oasis.opendocument.formula.png +usr/share/icons/hicolor/48x48/mimetypes/libreoffice-oasis-master-document.png usr/share/icons/hicolor/48x48/mimetypes/application-vnd.oasis.opendocument.master-document.png +usr/share/icons/hicolor/48x48/mimetypes/libreoffice-oasis-presentation.png usr/share/icons/hicolor/48x48/mimetypes/application-vnd.oasis.opendocument.presentation.png +usr/share/icons/hicolor/48x48/mimetypes/libreoffice-oasis-presentation-template.png usr/share/icons/hicolor/48x48/mimetypes/application-vnd.oasis.opendocument.presentation-template.png +usr/share/icons/hicolor/48x48/mimetypes/libreoffice-oasis-spreadsheet.png usr/share/icons/hicolor/48x48/mimetypes/application-vnd.oasis.opendocument.spreadsheet.png +usr/share/icons/hicolor/48x48/mimetypes/libreoffice-oasis-spreadsheet-template.png usr/share/icons/hicolor/48x48/mimetypes/application-vnd.oasis.opendocument.spreadsheet-template.png +usr/share/icons/hicolor/48x48/mimetypes/libreoffice-oasis-text.png usr/share/icons/hicolor/48x48/mimetypes/application-vnd.oasis.opendocument.text.png +usr/share/icons/hicolor/48x48/mimetypes/libreoffice-oasis-text-template.png usr/share/icons/hicolor/48x48/mimetypes/application-vnd.oasis.opendocument.text-template.png +usr/share/icons/hicolor/48x48/mimetypes/libreoffice-oasis-web-template.png usr/share/icons/hicolor/48x48/mimetypes/application-vnd.oasis.opendocument.web-template.png +etc/libreoffice/registry usr/lib/libreoffice/share/registry diff --git a/debian/libreoffice-common.lintian-overrides b/debian/libreoffice-common.lintian-overrides new file mode 100644 index 00000000000..efdaf3d980c --- /dev/null +++ b/debian/libreoffice-common.lintian-overrides @@ -0,0 +1,2 @@ +# this is essentially a breaks with version +libreoffice-common: breaks-without-version libreoffice-help-5.2 diff --git a/debian/libreoffice-common.maintscript b/debian/libreoffice-common.maintscript new file mode 100644 index 00000000000..5ef5e3d2f8c --- /dev/null +++ b/debian/libreoffice-common.maintscript @@ -0,0 +1,11 @@ +mv_conffile /etc/apparmor.d/usr.lib.libreofficeprogram.oosplash /etc/apparmor.d/usr.lib.libreoffice.program.oosplash 1:5.4.3-1 +mv_conffile /etc/apparmor.d/usr.lib.libreofficeprogram.senddoc /etc/apparmor.d/usr.lib.libreoffice.program.senddoc 1:5.4.3-1 +mv_conffile /etc/apparmor.d/usr.lib.libreofficeprogram.soffice.bin /etc/apparmor.d/usr.lib.libreoffice.program.soffice.bin 1:5.4.3-1 +mv_conffile /etc/apparmor.d/usr.lib.libreofficeprogram.xpdfimport /etc/apparmor.d/usr.lib.libreoffice.program.xpdfimport 1:5.4.3-1 + +# do this manually since dpkg-maintscript-helper dir_to_symlink +# does not work reliably in this case because we cannot ensure that all +# conflicting packages previously shipping files in +# /usr/lib/libreoffice/share/registry are either upgraded or removed +# but not just deconfigured, see #985297 +#dir_to_symlink /usr/lib/libreoffice/share/registry /etc/libreoffice/registry 1:7.0.2~rc1-1 diff --git a/debian/libreoffice-common.manpages b/debian/libreoffice-common.manpages new file mode 100644 index 00000000000..37ce2e86511 --- /dev/null +++ b/debian/libreoffice-common.manpages @@ -0,0 +1,4 @@ +debian/tmp/usr/share/man/man1/libreoffice.1.gz +debian/tmp/usr/share/man/man1/loffice.1.gz +debian/tmp/usr/share/man/man1/unopkg.1.gz +debian/tmp/usr/share/man/man1/lofromtemplate.1.gz diff --git a/debian/libreoffice-common.postinst.in b/debian/libreoffice-common.postinst.in new file mode 100644 index 00000000000..dd95adf44a6 --- /dev/null +++ b/debian/libreoffice-common.postinst.in @@ -0,0 +1,43 @@ +#!/bin/sh + +set -e + +#INCLUDE_SHELL_LIB# + +if [ "$1" = "triggered" ]; then + for triggername in $2; do + case "$triggername" in + # new "bundled" extensions (since 3.3) + "/@OODIR@/share/extensions") + make_lo_sync_extensions + ;; + "/@OODIR@") + # check also whether /usr/bin/loolwsd-systemplate-setup + # is +x do to not fail when it's gone but + # /var/lib/lool/systemplate is still there (loolwsd + # removed but not purged) + if [ -x /usr/bin/loolwsd-systemplate-setup -a \ + -d /var/lib/lool/systemplate ]; then + update_lool_systemplate + fi + ;; + esac + done +fi + +#DEBHELPER# + +# do this manually since dpkg-maintscript-helper dir_to_symlink +# does not work reliably in this case because we cannot ensure that all +# conflicting packages previously shipping files in +# /usr/lib/libreoffice/share/registry are either upgraded or removed +# but not just deconfigured, see #985297 +if [ "$1" = "configure" ] && dpkg --compare-versions "$2" lt-nl "1:7.0.4-4~" ; then + if [ ! -L /usr/lib/libreoffice/share/registry ]; then + if [ -d /usr/lib/libreoffice/share/registry ]; then + # this will fail if the directory is not yet empty + rmdir -v /usr/lib/libreoffice/share/registry + fi + ln -sfvT /etc/libreoffice/registry /usr/lib/libreoffice/share/registry + fi +fi diff --git a/debian/libreoffice-common.postrm.in b/debian/libreoffice-common.postrm.in new file mode 100644 index 00000000000..c4471b59176 --- /dev/null +++ b/debian/libreoffice-common.postrm.in @@ -0,0 +1,26 @@ +#!/bin/sh + +set -e + +#INCLUDE_SHELL_LIB# + +case "$1" in + remove|abort-install|abort-upgrade) + rm -rf /`echo @OODIR@ | sed -e s,usr/,var/,g`/share/prereg/bundled + rmdir /`echo @OODIR@ | sed -e s,usr/,var/,g`/share/prereg/ || true + rmdir /`echo @OODIR@ | sed -e s,usr/,var/,g`/share/ || true + # this belongs to -core, but won't work until we have -common stuff removed, too, so try here again + # in adduition to -core + rmdir /`echo @OODIR@ | sed -e s,usr/,var/,g`/program/ || true + rmdir /`echo @OODIR@ | sed -e s,usr/,var/,g` || true + # and try to remove /@OOBRANDDIR@ itself + rmdir /`echo @OODIR@ | sed -e s,usr/,var/,g` || true + ;; + purge) + rm -f /`echo @OODIR@ | sed -e s,usr/,var/,g`/share/config/javasettingsunopkginstall.xml + rmdir /`echo @OODIR@ | sed -e s,usr/,var/,g`/share/config || true + rmdir /`echo @OODIR@ | sed -e s,usr/,var/,g`/share || true + ;; +esac + +#DEBHELPER# diff --git a/debian/libreoffice-common.triggers.in b/debian/libreoffice-common.triggers.in new file mode 100644 index 00000000000..274301752fe --- /dev/null +++ b/debian/libreoffice-common.triggers.in @@ -0,0 +1,2 @@ +interest-noawait /@OODIR@/share/extensions +interest-noawait /@OODIR@ diff --git a/debian/libreoffice-common.ucf b/debian/libreoffice-common.ucf new file mode 100644 index 00000000000..b929f5f9c37 --- /dev/null +++ b/debian/libreoffice-common.ucf @@ -0,0 +1,6 @@ +/usr/lib/libreoffice/share/.registry/main.xcd /etc/libreoffice/registry/main.xcd +/usr/lib/libreoffice/share/.registry/pdfimport.xcd /etc/libreoffice/registry/pdfimport.xcd +/usr/lib/libreoffice/share/.registry/xsltfilter.xcd /etc/libreoffice/registry/xsltfilter.xcd +/usr/lib/libreoffice/share/.registry/lingucomponent.xcd /etc/libreoffice/registry/lingucomponent.xcd +/usr/lib/libreoffice/share/.registry/Langpack-en-US.xcd /etc/libreoffice/registry/Langpack-en-US.xcd +/usr/lib/libreoffice/share/.registry/res/fcfg_langpack_en-US.xcd /etc/libreoffice/registry/res/fcfg_langpack_en-US.xcd diff --git a/debian/libreoffice-core-nogui.bug-control b/debian/libreoffice-core-nogui.bug-control new file mode 100644 index 00000000000..7896392642f --- /dev/null +++ b/debian/libreoffice-core-nogui.bug-control @@ -0,0 +1 @@ +report-with: libreoffice-common libreoffice-java-common fonts-opensymbol diff --git a/debian/libreoffice-core-nogui.bug-script.in b/debian/libreoffice-core-nogui.bug-script.in new file mode 100755 index 00000000000..bba16b11cfc --- /dev/null +++ b/debian/libreoffice-core-nogui.bug-script.in @@ -0,0 +1,16 @@ +#!/bin/sh + +# list all installed extensions. --bundled, --shared and non-shared +/usr/lib/libreoffice/program/unopkg list --bundled >&3 +/usr/lib/libreoffice/program/unopkg list --shared >&3 +/usr/lib/libreoffice/program/unopkg list >&3 + +# experimental stuff enabled? +echo "" >&3 +echo "Experimental features enabled:" >&3 +#_lo_profile_ver=`echo @OOVER@ | cut -d. -f1` +_lo_profile_ver=4 +if [ -d "$HOME/.config/libreoffice/$_lo_profile_ver" ]; then + grep ExperimentalMode $HOME/.config/libreoffice/$_lo_profile_ver/user/registrymodifications.xcu >&3 +fi + diff --git a/debian/libreoffice-core-nogui.lintian-overrides b/debian/libreoffice-core-nogui.lintian-overrides new file mode 100644 index 00000000000..4c422e088c3 --- /dev/null +++ b/debian/libreoffice-core-nogui.lintian-overrides @@ -0,0 +1 @@ +libreoffice-core-nogui: embedded-library usr/lib/libreoffice/program/libpdfiumlo.so: openjpeg diff --git a/debian/libreoffice-core.bug-control b/debian/libreoffice-core.bug-control new file mode 100644 index 00000000000..f9456ca02a6 --- /dev/null +++ b/debian/libreoffice-core.bug-control @@ -0,0 +1,2 @@ +report-with: libreoffice-common libreoffice-java-common fonts-opensymbol +package-status: libxrender1 libxinerama1 libsane iceweasel firefox icedove iceape-browser pstoedit imagemagick fglrx-driver nvidia-glx nvidia-glx-legacy diff --git a/debian/libreoffice-core.bug-script.in b/debian/libreoffice-core.bug-script.in new file mode 100755 index 00000000000..2bfd1bea415 --- /dev/null +++ b/debian/libreoffice-core.bug-script.in @@ -0,0 +1,20 @@ +#!/bin/sh + +# list all installed extensions. --bundled, --shared and non-shared +/usr/lib/libreoffice/program/unopkg list --bundled >&3 +/usr/lib/libreoffice/program/unopkg list --shared >&3 +/usr/lib/libreoffice/program/unopkg list >&3 + +# experimental stuff enabled? +echo "" >&3 +echo "Experimental features enabled:" >&3 +#_lo_profile_ver=`echo @OOVER@ | cut -d. -f1` +_lo_profile_ver=4 +if [ -d "$HOME/.config/libreoffice/$_lo_profile_ver" ]; then + grep ExperimentalMode $HOME/.config/libreoffice/$_lo_profile_ver/user/registrymodifications.xcu >&3 +fi + +# installed VCLplugs +echo "" >&3 +echo "Installed VCLplugs:" >&3 +dpkg -l libreoffice-gtk3 libreoffice-qt5 libreoffice-kf5 >&3 diff --git a/debian/libreoffice-core.lintian-overrides b/debian/libreoffice-core.lintian-overrides new file mode 100644 index 00000000000..3a4d1d8b84d --- /dev/null +++ b/debian/libreoffice-core.lintian-overrides @@ -0,0 +1 @@ +libreoffice-core: embedded-library usr/lib/libreoffice/program/libpdfiumlo.so: openjpeg diff --git a/debian/libreoffice-core.maintscript b/debian/libreoffice-core.maintscript new file mode 100644 index 00000000000..926d53c1ae5 --- /dev/null +++ b/debian/libreoffice-core.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-core /usr/share/doc/libreoffice-core 1:6.4.0~alpha1~git20191013 diff --git a/debian/libreoffice-core.postrm.in b/debian/libreoffice-core.postrm.in new file mode 100755 index 00000000000..95ed9cb4f46 --- /dev/null +++ b/debian/libreoffice-core.postrm.in @@ -0,0 +1,13 @@ +#!/bin/sh + +set -e + +#INCLUDE_SHELL_LIB# + +if [ "$1" = "remove" ]; then + rm -rf /var/spool/libreoffice +fi + +#DEBHELPER# + +exit 0 diff --git a/debian/libreoffice-dev-common.maintscript b/debian/libreoffice-dev-common.maintscript new file mode 100644 index 00000000000..d9ebd73ef24 --- /dev/null +++ b/debian/libreoffice-dev-common.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-dev-common /usr/share/doc/libreoffice-common 1:6.4.0~alpha1~git20191013 diff --git a/debian/libreoffice-dev-doc.links b/debian/libreoffice-dev-doc.links new file mode 100644 index 00000000000..7e6fd17fba7 --- /dev/null +++ b/debian/libreoffice-dev-doc.links @@ -0,0 +1 @@ +usr/share/doc/libreoffice/sdk/docs usr/share/doc/libreoffice-dev-doc/api diff --git a/debian/libreoffice-dev.lintian-overrides b/debian/libreoffice-dev.lintian-overrides new file mode 100644 index 00000000000..f1338bb4535 --- /dev/null +++ b/debian/libreoffice-dev.lintian-overrides @@ -0,0 +1 @@ +libreoffice-dev: wrong-section-according-to-package-name libreoffice-dev => libdevel diff --git a/debian/libreoffice-dev.maintscript b/debian/libreoffice-dev.maintscript new file mode 100644 index 00000000000..dc89bb3d31d --- /dev/null +++ b/debian/libreoffice-dev.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-dev /usr/share/doc/libreoffice-core 1:6.4.0~alpha1~git20191013 diff --git a/debian/libreoffice-draw-nogui.bug-control b/debian/libreoffice-draw-nogui.bug-control new file mode 100644 index 00000000000..1ac405f9788 --- /dev/null +++ b/debian/libreoffice-draw-nogui.bug-control @@ -0,0 +1 @@ +report-with: libreoffice-core diff --git a/debian/libreoffice-draw-nogui.mime b/debian/libreoffice-draw-nogui.mime new file mode 100644 index 00000000000..e0b81d3bfb4 --- /dev/null +++ b/debian/libreoffice-draw-nogui.mime @@ -0,0 +1,13 @@ +### +# shared-mime-info + +# OASIS OpenDocument Format +application/vnd.oasis.opendocument.graphics; soffice --nologo --draw %s; edit=soffice --nologo --draw %s; print=soffice --nologo --draw -p %s; test=test -n "$DISPLAY"; description="OpenDocument Drawing"; nametemplate=%s.odg; priority=9 +application/vnd.oasis.opendocument.graphics-template; soffice --nologo --draw %s; edit=soffice --nologo --draw %s; print=soffice --nologo --draw -p %s; test=test -n "$DISPLAY"; description="OpenDocument Drawing Template"; nametemplate=%s.otg; priority=9 + +# OpenOffice.org 1.0 +application/vnd.sun.xml.draw; soffice --nologo --draw %s; edit=soffice --nologo --draw %s; test=test -n "$DISPLAY"; description="OpenOffice.org Drawing"; nametemplate=%s.sxd; priority=8 +application/vnd.sun.xml.draw.template; soffice --nologo --draw %s; edit=soffice --nologo --draw %s; test=test -n "$DISPLAY"; description="OpenOffice.org Drawing Template"; nametemplate=%s.std; priority=8 + +# +### diff --git a/debian/libreoffice-draw-nogui.ucf b/debian/libreoffice-draw-nogui.ucf new file mode 100644 index 00000000000..a1e42c709f6 --- /dev/null +++ b/debian/libreoffice-draw-nogui.ucf @@ -0,0 +1,2 @@ +/usr/lib/libreoffice/share/.registry/draw.xcd /etc/libreoffice/registry/draw.xcd +/usr/lib/libreoffice/share/.registry/graphicfilter.xcd /etc/libreoffice/registry/graphicfilter.xcd diff --git a/debian/libreoffice-draw.bug-control b/debian/libreoffice-draw.bug-control new file mode 100644 index 00000000000..1ac405f9788 --- /dev/null +++ b/debian/libreoffice-draw.bug-control @@ -0,0 +1 @@ +report-with: libreoffice-core diff --git a/debian/libreoffice-draw.lintian-overrides b/debian/libreoffice-draw.lintian-overrides new file mode 100644 index 00000000000..12588b54def --- /dev/null +++ b/debian/libreoffice-draw.lintian-overrides @@ -0,0 +1 @@ +libreoffice-draw: desktop-command-not-in-package usr/share/applications/libreoffice-draw.desktop libreoffice diff --git a/debian/libreoffice-draw.maintscript b/debian/libreoffice-draw.maintscript new file mode 100644 index 00000000000..cf0ace643cf --- /dev/null +++ b/debian/libreoffice-draw.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-draw /usr/share/doc/libreoffice-core 1:6.4.0~alpha1~git20191013 diff --git a/debian/libreoffice-draw.manpages b/debian/libreoffice-draw.manpages new file mode 100644 index 00000000000..3267e53d6e2 --- /dev/null +++ b/debian/libreoffice-draw.manpages @@ -0,0 +1 @@ +debian/tmp/usr/share/man/man1/lodraw.1.gz diff --git a/debian/libreoffice-draw.mime b/debian/libreoffice-draw.mime new file mode 100644 index 00000000000..e0b81d3bfb4 --- /dev/null +++ b/debian/libreoffice-draw.mime @@ -0,0 +1,13 @@ +### +# shared-mime-info + +# OASIS OpenDocument Format +application/vnd.oasis.opendocument.graphics; soffice --nologo --draw %s; edit=soffice --nologo --draw %s; print=soffice --nologo --draw -p %s; test=test -n "$DISPLAY"; description="OpenDocument Drawing"; nametemplate=%s.odg; priority=9 +application/vnd.oasis.opendocument.graphics-template; soffice --nologo --draw %s; edit=soffice --nologo --draw %s; print=soffice --nologo --draw -p %s; test=test -n "$DISPLAY"; description="OpenDocument Drawing Template"; nametemplate=%s.otg; priority=9 + +# OpenOffice.org 1.0 +application/vnd.sun.xml.draw; soffice --nologo --draw %s; edit=soffice --nologo --draw %s; test=test -n "$DISPLAY"; description="OpenOffice.org Drawing"; nametemplate=%s.sxd; priority=8 +application/vnd.sun.xml.draw.template; soffice --nologo --draw %s; edit=soffice --nologo --draw %s; test=test -n "$DISPLAY"; description="OpenOffice.org Drawing Template"; nametemplate=%s.std; priority=8 + +# +### diff --git a/debian/libreoffice-draw.ucf b/debian/libreoffice-draw.ucf new file mode 100644 index 00000000000..a1e42c709f6 --- /dev/null +++ b/debian/libreoffice-draw.ucf @@ -0,0 +1,2 @@ +/usr/lib/libreoffice/share/.registry/draw.xcd /etc/libreoffice/registry/draw.xcd +/usr/lib/libreoffice/share/.registry/graphicfilter.xcd /etc/libreoffice/registry/graphicfilter.xcd diff --git a/debian/libreoffice-evolution.bug-control b/debian/libreoffice-evolution.bug-control new file mode 100644 index 00000000000..aa427dea40d --- /dev/null +++ b/debian/libreoffice-evolution.bug-control @@ -0,0 +1 @@ +report-with: libreoffice-core evolution libreoffice-base diff --git a/debian/libreoffice-evolution.maintscript b/debian/libreoffice-evolution.maintscript new file mode 100644 index 00000000000..3d581a38dbe --- /dev/null +++ b/debian/libreoffice-evolution.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-evolution /usr/share/doc/libreoffice-core 1:6.4.0~alpha1~git20191013 diff --git a/debian/libreoffice-evolution.ucf b/debian/libreoffice-evolution.ucf new file mode 100644 index 00000000000..8b029ede374 --- /dev/null +++ b/debian/libreoffice-evolution.ucf @@ -0,0 +1 @@ +/usr/lib/libreoffice/share/.registry/evoab.xcd /etc/libreoffice/registry/evoab.xcd diff --git a/debian/libreoffice-gnome.maintscript b/debian/libreoffice-gnome.maintscript new file mode 100644 index 00000000000..5ea20d66f35 --- /dev/null +++ b/debian/libreoffice-gnome.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-gnome /usr/share/doc/libreoffice-core 1:6.4.0~alpha1~git20191013 diff --git a/debian/libreoffice-gnome.ucf b/debian/libreoffice-gnome.ucf new file mode 100644 index 00000000000..7306c2e357b --- /dev/null +++ b/debian/libreoffice-gnome.ucf @@ -0,0 +1 @@ +/usr/lib/libreoffice/share/.registry/gnome.xcd /etc/libreoffice/registry/gnome.xcd diff --git a/debian/libreoffice-gtk3.maintscript b/debian/libreoffice-gtk3.maintscript new file mode 100644 index 00000000000..284aeadb753 --- /dev/null +++ b/debian/libreoffice-gtk3.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-gtk3 /usr/share/doc/libreoffice-core 1:6.4.0~alpha1~git20191013 diff --git a/debian/libreoffice-help-ca-valencia.maintscript b/debian/libreoffice-help-ca-valencia.maintscript new file mode 100644 index 00000000000..333a3f817b1 --- /dev/null +++ b/debian/libreoffice-help-ca-valencia.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-help-ca-valencia /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-help-ca.maintscript b/debian/libreoffice-help-ca.maintscript new file mode 100644 index 00000000000..36688ec51d9 --- /dev/null +++ b/debian/libreoffice-help-ca.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-help-ca /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-help-common.links b/debian/libreoffice-help-common.links new file mode 100644 index 00000000000..48ab2acd4ce --- /dev/null +++ b/debian/libreoffice-help-common.links @@ -0,0 +1 @@ +/usr/share/javascript/normalize.css/normalize.css usr/share/libreoffice/help/normalize.css diff --git a/debian/libreoffice-help-common.maintscript b/debian/libreoffice-help-common.maintscript new file mode 100644 index 00000000000..635c1ca10f5 --- /dev/null +++ b/debian/libreoffice-help-common.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-help-common /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-help-cs.maintscript b/debian/libreoffice-help-cs.maintscript new file mode 100644 index 00000000000..24048eadd38 --- /dev/null +++ b/debian/libreoffice-help-cs.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-help-cs /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-help-da.maintscript b/debian/libreoffice-help-da.maintscript new file mode 100644 index 00000000000..fdf5f339b19 --- /dev/null +++ b/debian/libreoffice-help-da.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-help-da /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-help-de.maintscript b/debian/libreoffice-help-de.maintscript new file mode 100644 index 00000000000..d55b7661775 --- /dev/null +++ b/debian/libreoffice-help-de.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-help-de /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-help-dz.maintscript b/debian/libreoffice-help-dz.maintscript new file mode 100644 index 00000000000..d4fe0143039 --- /dev/null +++ b/debian/libreoffice-help-dz.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-help-dz /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-help-el.maintscript b/debian/libreoffice-help-el.maintscript new file mode 100644 index 00000000000..5ad40b15a77 --- /dev/null +++ b/debian/libreoffice-help-el.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-help-el /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-help-en-gb.maintscript b/debian/libreoffice-help-en-gb.maintscript new file mode 100644 index 00000000000..f0386001673 --- /dev/null +++ b/debian/libreoffice-help-en-gb.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-help-en-gb /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-help-en-us.maintscript b/debian/libreoffice-help-en-us.maintscript new file mode 100644 index 00000000000..a4a63f7dbb2 --- /dev/null +++ b/debian/libreoffice-help-en-us.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-help-en-us /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-help-es.maintscript b/debian/libreoffice-help-es.maintscript new file mode 100644 index 00000000000..2b04756b620 --- /dev/null +++ b/debian/libreoffice-help-es.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-help-es /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-help-et.maintscript b/debian/libreoffice-help-et.maintscript new file mode 100644 index 00000000000..d65fd19165c --- /dev/null +++ b/debian/libreoffice-help-et.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-help-et /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-help-eu.maintscript b/debian/libreoffice-help-eu.maintscript new file mode 100644 index 00000000000..e243177487a --- /dev/null +++ b/debian/libreoffice-help-eu.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-help-eu /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-help-fi.maintscript b/debian/libreoffice-help-fi.maintscript new file mode 100644 index 00000000000..93b944a1a45 --- /dev/null +++ b/debian/libreoffice-help-fi.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-help-fi /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-help-fr.maintscript b/debian/libreoffice-help-fr.maintscript new file mode 100644 index 00000000000..d94c693d367 --- /dev/null +++ b/debian/libreoffice-help-fr.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-help-fr /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-help-gl.maintscript b/debian/libreoffice-help-gl.maintscript new file mode 100644 index 00000000000..10cabd0e987 --- /dev/null +++ b/debian/libreoffice-help-gl.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-help-gl /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-help-hi.maintscript b/debian/libreoffice-help-hi.maintscript new file mode 100644 index 00000000000..34485e89c8e --- /dev/null +++ b/debian/libreoffice-help-hi.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-help-hi /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-help-hu.maintscript b/debian/libreoffice-help-hu.maintscript new file mode 100644 index 00000000000..9d307fbfc3b --- /dev/null +++ b/debian/libreoffice-help-hu.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-help-hu /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-help-id.maintscript b/debian/libreoffice-help-id.maintscript new file mode 100644 index 00000000000..9dfe92f51a1 --- /dev/null +++ b/debian/libreoffice-help-id.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-help-id /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-help-it.maintscript b/debian/libreoffice-help-it.maintscript new file mode 100644 index 00000000000..a9f1015ff56 --- /dev/null +++ b/debian/libreoffice-help-it.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-help-it /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-help-ja.maintscript b/debian/libreoffice-help-ja.maintscript new file mode 100644 index 00000000000..00db55cb21a --- /dev/null +++ b/debian/libreoffice-help-ja.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-help-ja /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-help-km.maintscript b/debian/libreoffice-help-km.maintscript new file mode 100644 index 00000000000..2fb9ccd6457 --- /dev/null +++ b/debian/libreoffice-help-km.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-help-km /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-help-ko.maintscript b/debian/libreoffice-help-ko.maintscript new file mode 100644 index 00000000000..aed2e03d649 --- /dev/null +++ b/debian/libreoffice-help-ko.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-help-ko /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-help-nl.maintscript b/debian/libreoffice-help-nl.maintscript new file mode 100644 index 00000000000..ab75a603e30 --- /dev/null +++ b/debian/libreoffice-help-nl.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-help-nl /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-help-om.maintscript b/debian/libreoffice-help-om.maintscript new file mode 100644 index 00000000000..64d5f549e39 --- /dev/null +++ b/debian/libreoffice-help-om.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-help-om /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-help-pl.maintscript b/debian/libreoffice-help-pl.maintscript new file mode 100644 index 00000000000..b1fca4d24d0 --- /dev/null +++ b/debian/libreoffice-help-pl.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-help-pl /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-help-pt-br.maintscript b/debian/libreoffice-help-pt-br.maintscript new file mode 100644 index 00000000000..ca4f77f6fbc --- /dev/null +++ b/debian/libreoffice-help-pt-br.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-help-pt-br /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-help-pt.maintscript b/debian/libreoffice-help-pt.maintscript new file mode 100644 index 00000000000..5d368903125 --- /dev/null +++ b/debian/libreoffice-help-pt.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-help-pt /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-help-ru.maintscript b/debian/libreoffice-help-ru.maintscript new file mode 100644 index 00000000000..13ff092f416 --- /dev/null +++ b/debian/libreoffice-help-ru.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-help-ru /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-help-sk.maintscript b/debian/libreoffice-help-sk.maintscript new file mode 100644 index 00000000000..9306f1976f1 --- /dev/null +++ b/debian/libreoffice-help-sk.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-help-sk /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-help-sl.maintscript b/debian/libreoffice-help-sl.maintscript new file mode 100644 index 00000000000..88eba79837b --- /dev/null +++ b/debian/libreoffice-help-sl.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-help-sl /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-help-sv.maintscript b/debian/libreoffice-help-sv.maintscript new file mode 100644 index 00000000000..4c230591aee --- /dev/null +++ b/debian/libreoffice-help-sv.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-help-sv /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-help-tr.maintscript b/debian/libreoffice-help-tr.maintscript new file mode 100644 index 00000000000..08522b12adc --- /dev/null +++ b/debian/libreoffice-help-tr.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-help-tr /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-help-vi.maintscript b/debian/libreoffice-help-vi.maintscript new file mode 100644 index 00000000000..c2ee611d03f --- /dev/null +++ b/debian/libreoffice-help-vi.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-help-vi /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-help-zh-cn.maintscript b/debian/libreoffice-help-zh-cn.maintscript new file mode 100644 index 00000000000..1e3c388c1b6 --- /dev/null +++ b/debian/libreoffice-help-zh-cn.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-help-zh-cn /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-help-zh-tw.maintscript b/debian/libreoffice-help-zh-tw.maintscript new file mode 100644 index 00000000000..b13206f1914 --- /dev/null +++ b/debian/libreoffice-help-zh-tw.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-help-zh-tw /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-help.lintian-overrides.in b/debian/libreoffice-help.lintian-overrides.in new file mode 100644 index 00000000000..17fde6dd126 --- /dev/null +++ b/debian/libreoffice-help.lintian-overrides.in @@ -0,0 +1,15 @@ +# these are in -help-common. See lintian bug http://bugs.debian.org/897244 +doc-base-file-references-missing-file libreoffice-help-@LCODE@:8 /usr/share/libreoffice/help/media/* +doc-base-file-references-missing-file libreoffice-help-@LCODE@:8 /usr/share/libreoffice/help/help.html +doc-base-file-references-missing-file libreoffice-help-@LCODE@:8 /usr/share/libreoffice/help/idxcaption.xsl +doc-base-file-references-missing-file libreoffice-help-@LCODE@:8 /usr/share/libreoffice/help/fuse.js +doc-base-file-references-missing-file libreoffice-help-@LCODE@:8 /usr/share/libreoffice/help/help.js +doc-base-file-references-missing-file libreoffice-help-@LCODE@:8 /usr/share/libreoffice/help/hid2file.js +doc-base-file-references-missing-file libreoffice-help-@LCODE@:8 /usr/share/libreoffice/help/paginathing.js +doc-base-file-references-missing-file libreoffice-help-@LCODE@:8 /usr/share/libreoffice/help/idxcontent.xsl +doc-base-file-references-missing-file libreoffice-help-@LCODE@:8 /usr/share/libreoffice/help/index.html +doc-base-file-references-missing-file libreoffice-help-@LCODE@:8 /usr/share/libreoffice/help/normalize.css +doc-base-file-references-missing-file libreoffice-help-@LCODE@:8 /usr/share/libreoffice/help/main_transform.xsl +doc-base-file-references-missing-file libreoffice-help-@LCODE@:8 /usr/share/libreoffice/help/help2.js +doc-base-file-references-missing-file libreoffice-help-@LCODE@:8 /usr/share/libreoffice/help/default.css + diff --git a/debian/libreoffice-impress-nogui.bug-control b/debian/libreoffice-impress-nogui.bug-control new file mode 100644 index 00000000000..a3a052e7da4 --- /dev/null +++ b/debian/libreoffice-impress-nogui.bug-control @@ -0,0 +1 @@ +report-with: libreoffice-core libreoffice-draw diff --git a/debian/libreoffice-impress-nogui.mime b/debian/libreoffice-impress-nogui.mime new file mode 100644 index 00000000000..ed8a11fd90b --- /dev/null +++ b/debian/libreoffice-impress-nogui.mime @@ -0,0 +1,25 @@ +### +# shared-mime-info + +# ECMA Office Open XML (Microsoft Office 2007) +application/vnd.ms-powerpoint.presentation.macroEnabled.12; soffice --nologo --impress %s; edit=soffice --nologo --impress %s; test=test -n "$DISPLAY"; description="Office Open XML Presentation with Macros Enabled"; nametemplate=%s.pptm; priority=3 +application/vnd.ms-powerpoint.slideshow.macroEnabled.12; soffice --nologo --impress %s; edit=soffice --nologo --impress %s; test=test -n "$DISPLAY"; description="Office Open XML Presentation Slide Show with Macros Enabled"; nametemplate=%s.ppsm; priority=3 +application/vnd.ms-powerpoint.template.macroEnabled.12; soffice --nologo --impress %s; edit=soffice --nologo --impress %s; test=test -n "$DISPLAY"; description="Office Open XML Presentation Template with Macros Enabled"; nametemplate=%s.potm; priority=3 +application/vnd.openxmlformats-officedocument.presentationml.presentation; soffice --nologo --impress %s; edit=soffice --nologo --impress %s; test=test -n "$DISPLAY"; description="Office Open XML Presentation"; nametemplate=%s.pptx; priority=3 +application/vnd.openxmlformats-officedocument.presentationml.slideshow; soffice --nologo --impress %s; edit=soffice --nologo --impress %s; test=test -n "$DISPLAY"; description="Office Open XML Presentation Slide Show"; nametemplate=%s.ppsx; priority=3 +application/vnd.openxmlformats-officedocument.presentationml.template; soffice --nologo --impress %s; edit=soffice --nologo --impress %s; test=test -n "$DISPLAY"; description="Office Open XML Presentation Template"; nametemplate=%s.potx; priority=3 + +# Microsoft PowerPoint +application/vnd.ms-powerpoint; soffice --nologo --impress %s; edit=soffice --nologo --impress %s; test=test -n "$DISPLAY"; description="Microsoft PowerPoint Document"; nametemplate=%s.ppt; priority=3 + +# OASIS OpenDocument Format +application/vnd.oasis.opendocument.presentation; soffice --nologo --impress %s; edit=soffice --nologo --impress %s; print=soffice --nologo --impress -p %s; test=test -n "$DISPLAY"; description="OpenDocument Presentation"; nametemplate=%s.odp; priority=9 +application/vnd.oasis.opendocument.presentation-template; soffice --nologo --impress %s; edit=soffice --nologo --impress %s; print=soffice --nologo --impress -p %s; test=test -n "$DISPLAY"; description="OpenDocument Presentation Template"; nametemplate=%s.otp; priority=9 + +# OpenOffice.org 1.0 +application/vnd.sun.xml.impress; soffice --nologo --impress %s; edit=soffice --nologo --impress %s; test=test -n "$DISPLAY"; description="OpenOffice.org Presentation"; nametemplate=%s.sxi; priority=8 +application/vnd.sun.xml.impress.template; soffice --nologo --impress %s; edit=soffice --nologo --impress %s; test=test -n "$DISPLAY"; description="OpenOffice.org Presentation Template"; nametemplate=%s.sti; priority=8 + +# +### + diff --git a/debian/libreoffice-impress-nogui.ucf b/debian/libreoffice-impress-nogui.ucf new file mode 100644 index 00000000000..9a356136427 --- /dev/null +++ b/debian/libreoffice-impress-nogui.ucf @@ -0,0 +1 @@ +/usr/lib/libreoffice/share/.registry/impress.xcd /etc/libreoffice/registry/impress.xcd diff --git a/debian/libreoffice-impress.bug-control b/debian/libreoffice-impress.bug-control new file mode 100644 index 00000000000..116fcdbd609 --- /dev/null +++ b/debian/libreoffice-impress.bug-control @@ -0,0 +1 @@ +report-with: libreoffice-core libreoffice-draw fglrx-glx ia32-fglrx-glx nvidia-glx nvidia-glx-legacy diff --git a/debian/libreoffice-impress.lintian-overrides b/debian/libreoffice-impress.lintian-overrides new file mode 100644 index 00000000000..5df0b376ef9 --- /dev/null +++ b/debian/libreoffice-impress.lintian-overrides @@ -0,0 +1 @@ +libreoffice-impress: desktop-command-not-in-package usr/share/applications/libreoffice-impress.desktop libreoffice diff --git a/debian/libreoffice-impress.maintscript b/debian/libreoffice-impress.maintscript new file mode 100644 index 00000000000..06608cf8296 --- /dev/null +++ b/debian/libreoffice-impress.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-impress /usr/share/doc/libreoffice-core 1:6.4.0~alpha1~git20191013 diff --git a/debian/libreoffice-impress.manpages b/debian/libreoffice-impress.manpages new file mode 100644 index 00000000000..60ab514ba8f --- /dev/null +++ b/debian/libreoffice-impress.manpages @@ -0,0 +1 @@ +debian/tmp/usr/share/man/man1/loimpress.1.gz diff --git a/debian/libreoffice-impress.mime b/debian/libreoffice-impress.mime new file mode 100644 index 00000000000..ed8a11fd90b --- /dev/null +++ b/debian/libreoffice-impress.mime @@ -0,0 +1,25 @@ +### +# shared-mime-info + +# ECMA Office Open XML (Microsoft Office 2007) +application/vnd.ms-powerpoint.presentation.macroEnabled.12; soffice --nologo --impress %s; edit=soffice --nologo --impress %s; test=test -n "$DISPLAY"; description="Office Open XML Presentation with Macros Enabled"; nametemplate=%s.pptm; priority=3 +application/vnd.ms-powerpoint.slideshow.macroEnabled.12; soffice --nologo --impress %s; edit=soffice --nologo --impress %s; test=test -n "$DISPLAY"; description="Office Open XML Presentation Slide Show with Macros Enabled"; nametemplate=%s.ppsm; priority=3 +application/vnd.ms-powerpoint.template.macroEnabled.12; soffice --nologo --impress %s; edit=soffice --nologo --impress %s; test=test -n "$DISPLAY"; description="Office Open XML Presentation Template with Macros Enabled"; nametemplate=%s.potm; priority=3 +application/vnd.openxmlformats-officedocument.presentationml.presentation; soffice --nologo --impress %s; edit=soffice --nologo --impress %s; test=test -n "$DISPLAY"; description="Office Open XML Presentation"; nametemplate=%s.pptx; priority=3 +application/vnd.openxmlformats-officedocument.presentationml.slideshow; soffice --nologo --impress %s; edit=soffice --nologo --impress %s; test=test -n "$DISPLAY"; description="Office Open XML Presentation Slide Show"; nametemplate=%s.ppsx; priority=3 +application/vnd.openxmlformats-officedocument.presentationml.template; soffice --nologo --impress %s; edit=soffice --nologo --impress %s; test=test -n "$DISPLAY"; description="Office Open XML Presentation Template"; nametemplate=%s.potx; priority=3 + +# Microsoft PowerPoint +application/vnd.ms-powerpoint; soffice --nologo --impress %s; edit=soffice --nologo --impress %s; test=test -n "$DISPLAY"; description="Microsoft PowerPoint Document"; nametemplate=%s.ppt; priority=3 + +# OASIS OpenDocument Format +application/vnd.oasis.opendocument.presentation; soffice --nologo --impress %s; edit=soffice --nologo --impress %s; print=soffice --nologo --impress -p %s; test=test -n "$DISPLAY"; description="OpenDocument Presentation"; nametemplate=%s.odp; priority=9 +application/vnd.oasis.opendocument.presentation-template; soffice --nologo --impress %s; edit=soffice --nologo --impress %s; print=soffice --nologo --impress -p %s; test=test -n "$DISPLAY"; description="OpenDocument Presentation Template"; nametemplate=%s.otp; priority=9 + +# OpenOffice.org 1.0 +application/vnd.sun.xml.impress; soffice --nologo --impress %s; edit=soffice --nologo --impress %s; test=test -n "$DISPLAY"; description="OpenOffice.org Presentation"; nametemplate=%s.sxi; priority=8 +application/vnd.sun.xml.impress.template; soffice --nologo --impress %s; edit=soffice --nologo --impress %s; test=test -n "$DISPLAY"; description="OpenOffice.org Presentation Template"; nametemplate=%s.sti; priority=8 + +# +### + diff --git a/debian/libreoffice-impress.ucf b/debian/libreoffice-impress.ucf new file mode 100644 index 00000000000..a2680a010db --- /dev/null +++ b/debian/libreoffice-impress.ucf @@ -0,0 +1,2 @@ +/usr/lib/libreoffice/share/.registry/impress.xcd /etc/libreoffice/registry/impress.xcd +/usr/lib/libreoffice/share/.registry/ogltrans.xcd /etc/libreoffice/registry/ogltrans.xcd diff --git a/debian/libreoffice-java-common.maintscript b/debian/libreoffice-java-common.maintscript new file mode 100644 index 00000000000..38517c7819f --- /dev/null +++ b/debian/libreoffice-java-common.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-java-common /usr/share/doc/libreoffice-common 1:6.4.0~alpha1~git20191013 diff --git a/debian/libreoffice-kde5.maintscript b/debian/libreoffice-kde5.maintscript new file mode 100644 index 00000000000..1711748cc1c --- /dev/null +++ b/debian/libreoffice-kde5.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-kde5 /usr/share/doc/libreoffice-core 1:6.4.0~alpha1~git20191013 diff --git a/debian/libreoffice-kf5.maintscript b/debian/libreoffice-kf5.maintscript new file mode 100644 index 00000000000..37dbb42031e --- /dev/null +++ b/debian/libreoffice-kf5.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-kf5 /usr/share/doc/libreoffice-core 1:6.4.0~alpha1~git20191013 diff --git a/debian/libreoffice-l10n-af.maintscript b/debian/libreoffice-l10n-af.maintscript new file mode 100644 index 00000000000..525bb4cbe5b --- /dev/null +++ b/debian/libreoffice-l10n-af.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-af /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-am.maintscript b/debian/libreoffice-l10n-am.maintscript new file mode 100644 index 00000000000..2df6ddb2a11 --- /dev/null +++ b/debian/libreoffice-l10n-am.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-am /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-ar.maintscript b/debian/libreoffice-l10n-ar.maintscript new file mode 100644 index 00000000000..da522cadfaf --- /dev/null +++ b/debian/libreoffice-l10n-ar.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-ar /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-as.maintscript b/debian/libreoffice-l10n-as.maintscript new file mode 100644 index 00000000000..926ab90bf80 --- /dev/null +++ b/debian/libreoffice-l10n-as.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-as /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-ast.maintscript b/debian/libreoffice-l10n-ast.maintscript new file mode 100644 index 00000000000..df6ea667a14 --- /dev/null +++ b/debian/libreoffice-l10n-ast.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-ast /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-be.maintscript b/debian/libreoffice-l10n-be.maintscript new file mode 100644 index 00000000000..53b4bd4f20c --- /dev/null +++ b/debian/libreoffice-l10n-be.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-be /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-bg.maintscript b/debian/libreoffice-l10n-bg.maintscript new file mode 100644 index 00000000000..e8ba2180efa --- /dev/null +++ b/debian/libreoffice-l10n-bg.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-bg /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-bn.maintscript b/debian/libreoffice-l10n-bn.maintscript new file mode 100644 index 00000000000..78da9606611 --- /dev/null +++ b/debian/libreoffice-l10n-bn.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-bn /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-br.maintscript b/debian/libreoffice-l10n-br.maintscript new file mode 100644 index 00000000000..d92f24031e2 --- /dev/null +++ b/debian/libreoffice-l10n-br.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-br /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-bs.maintscript b/debian/libreoffice-l10n-bs.maintscript new file mode 100644 index 00000000000..1178e5a468f --- /dev/null +++ b/debian/libreoffice-l10n-bs.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-bs /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-ca.maintscript b/debian/libreoffice-l10n-ca.maintscript new file mode 100644 index 00000000000..471887d422d --- /dev/null +++ b/debian/libreoffice-l10n-ca.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-ca /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-cs.maintscript b/debian/libreoffice-l10n-cs.maintscript new file mode 100644 index 00000000000..29d0c0ab488 --- /dev/null +++ b/debian/libreoffice-l10n-cs.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-cs /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-cy.maintscript b/debian/libreoffice-l10n-cy.maintscript new file mode 100644 index 00000000000..3b30f967db0 --- /dev/null +++ b/debian/libreoffice-l10n-cy.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-cy /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-da.maintscript b/debian/libreoffice-l10n-da.maintscript new file mode 100644 index 00000000000..3cbf1d478ed --- /dev/null +++ b/debian/libreoffice-l10n-da.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-da /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-de.maintscript b/debian/libreoffice-l10n-de.maintscript new file mode 100644 index 00000000000..68063de7be6 --- /dev/null +++ b/debian/libreoffice-l10n-de.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-de /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-dz.maintscript b/debian/libreoffice-l10n-dz.maintscript new file mode 100644 index 00000000000..76c519778f7 --- /dev/null +++ b/debian/libreoffice-l10n-dz.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-dz /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-el.maintscript b/debian/libreoffice-l10n-el.maintscript new file mode 100644 index 00000000000..f9f850b3806 --- /dev/null +++ b/debian/libreoffice-l10n-el.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-el /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-en-gb.maintscript b/debian/libreoffice-l10n-en-gb.maintscript new file mode 100644 index 00000000000..f0ecabcb91a --- /dev/null +++ b/debian/libreoffice-l10n-en-gb.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-en-gb /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-en-us.maintscript b/debian/libreoffice-l10n-en-us.maintscript new file mode 100644 index 00000000000..edba2604b30 --- /dev/null +++ b/debian/libreoffice-l10n-en-us.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-en-us /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-en-za.maintscript b/debian/libreoffice-l10n-en-za.maintscript new file mode 100644 index 00000000000..1897e7b1ebd --- /dev/null +++ b/debian/libreoffice-l10n-en-za.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-en-za /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-eo.maintscript b/debian/libreoffice-l10n-eo.maintscript new file mode 100644 index 00000000000..67345012c76 --- /dev/null +++ b/debian/libreoffice-l10n-eo.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-eo /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-es.maintscript b/debian/libreoffice-l10n-es.maintscript new file mode 100644 index 00000000000..e3287c665bf --- /dev/null +++ b/debian/libreoffice-l10n-es.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-es /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-et.maintscript b/debian/libreoffice-l10n-et.maintscript new file mode 100644 index 00000000000..c3e25bb4085 --- /dev/null +++ b/debian/libreoffice-l10n-et.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-et /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-eu.maintscript b/debian/libreoffice-l10n-eu.maintscript new file mode 100644 index 00000000000..a503c6d2430 --- /dev/null +++ b/debian/libreoffice-l10n-eu.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-eu /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-fa.maintscript b/debian/libreoffice-l10n-fa.maintscript new file mode 100644 index 00000000000..4b7029651ff --- /dev/null +++ b/debian/libreoffice-l10n-fa.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-fa /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-fi.maintscript b/debian/libreoffice-l10n-fi.maintscript new file mode 100644 index 00000000000..cf6d4494e40 --- /dev/null +++ b/debian/libreoffice-l10n-fi.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-fi /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-fr.maintscript b/debian/libreoffice-l10n-fr.maintscript new file mode 100644 index 00000000000..6d3134977e7 --- /dev/null +++ b/debian/libreoffice-l10n-fr.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-fr /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-ga.maintscript b/debian/libreoffice-l10n-ga.maintscript new file mode 100644 index 00000000000..165629c369a --- /dev/null +++ b/debian/libreoffice-l10n-ga.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-ga /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-gd.maintscript b/debian/libreoffice-l10n-gd.maintscript new file mode 100644 index 00000000000..4748b698bdd --- /dev/null +++ b/debian/libreoffice-l10n-gd.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-gd /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-gl.maintscript b/debian/libreoffice-l10n-gl.maintscript new file mode 100644 index 00000000000..4abfef89e38 --- /dev/null +++ b/debian/libreoffice-l10n-gl.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-gl /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-gu.maintscript b/debian/libreoffice-l10n-gu.maintscript new file mode 100644 index 00000000000..d28f9b66835 --- /dev/null +++ b/debian/libreoffice-l10n-gu.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-gu /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-gug.maintscript b/debian/libreoffice-l10n-gug.maintscript new file mode 100644 index 00000000000..22caeda6f2a --- /dev/null +++ b/debian/libreoffice-l10n-gug.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-gug /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-he.maintscript b/debian/libreoffice-l10n-he.maintscript new file mode 100644 index 00000000000..48c588cb7f3 --- /dev/null +++ b/debian/libreoffice-l10n-he.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-he /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-hi.maintscript b/debian/libreoffice-l10n-hi.maintscript new file mode 100644 index 00000000000..c1aafd373c4 --- /dev/null +++ b/debian/libreoffice-l10n-hi.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-hi /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-hr.maintscript b/debian/libreoffice-l10n-hr.maintscript new file mode 100644 index 00000000000..7924ca0526a --- /dev/null +++ b/debian/libreoffice-l10n-hr.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-hr /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-hu.maintscript b/debian/libreoffice-l10n-hu.maintscript new file mode 100644 index 00000000000..042765e9d1a --- /dev/null +++ b/debian/libreoffice-l10n-hu.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-hu /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-id.maintscript b/debian/libreoffice-l10n-id.maintscript new file mode 100644 index 00000000000..e18551b2567 --- /dev/null +++ b/debian/libreoffice-l10n-id.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-id /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-in.lintian-overrides b/debian/libreoffice-l10n-in.lintian-overrides new file mode 100644 index 00000000000..5b67277e05e --- /dev/null +++ b/debian/libreoffice-l10n-in.lintian-overrides @@ -0,0 +1,2 @@ +# this is a metapackage, so actually "metapackages" is correct, IMHO +libreoffice-l10n-in: wrong-section-according-to-package-name libreoffice-l10n-in => localization diff --git a/debian/libreoffice-l10n-in.maintscript b/debian/libreoffice-l10n-in.maintscript new file mode 100644 index 00000000000..230d48c463b --- /dev/null +++ b/debian/libreoffice-l10n-in.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-in /usr/share/doc/libreoffice-common 1:6.4.0-1 diff --git a/debian/libreoffice-l10n-is.maintscript b/debian/libreoffice-l10n-is.maintscript new file mode 100644 index 00000000000..3631a6a5e29 --- /dev/null +++ b/debian/libreoffice-l10n-is.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-is /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-it.maintscript b/debian/libreoffice-l10n-it.maintscript new file mode 100644 index 00000000000..18be5b42753 --- /dev/null +++ b/debian/libreoffice-l10n-it.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-it /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-ja.maintscript b/debian/libreoffice-l10n-ja.maintscript new file mode 100644 index 00000000000..7ce61040abf --- /dev/null +++ b/debian/libreoffice-l10n-ja.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-ja /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-ka.maintscript b/debian/libreoffice-l10n-ka.maintscript new file mode 100644 index 00000000000..869811523d3 --- /dev/null +++ b/debian/libreoffice-l10n-ka.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-ka /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-kk.maintscript b/debian/libreoffice-l10n-kk.maintscript new file mode 100644 index 00000000000..b749dd7befa --- /dev/null +++ b/debian/libreoffice-l10n-kk.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-kk /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-km.maintscript b/debian/libreoffice-l10n-km.maintscript new file mode 100644 index 00000000000..30a3839251c --- /dev/null +++ b/debian/libreoffice-l10n-km.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-km /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-kmr.maintscript b/debian/libreoffice-l10n-kmr.maintscript new file mode 100644 index 00000000000..d7405d3c537 --- /dev/null +++ b/debian/libreoffice-l10n-kmr.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-kmr /usr/share/doc/libreoffice-common 1:6.4.0-1 diff --git a/debian/libreoffice-l10n-kn.maintscript b/debian/libreoffice-l10n-kn.maintscript new file mode 100644 index 00000000000..6d4a37380e2 --- /dev/null +++ b/debian/libreoffice-l10n-kn.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-kn /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-ko.maintscript b/debian/libreoffice-l10n-ko.maintscript new file mode 100644 index 00000000000..2054fa9e9c3 --- /dev/null +++ b/debian/libreoffice-l10n-ko.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-ko /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-lt.maintscript b/debian/libreoffice-l10n-lt.maintscript new file mode 100644 index 00000000000..1cac226ffe1 --- /dev/null +++ b/debian/libreoffice-l10n-lt.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-lt /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-lv.maintscript b/debian/libreoffice-l10n-lv.maintscript new file mode 100644 index 00000000000..7df01156315 --- /dev/null +++ b/debian/libreoffice-l10n-lv.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-lv /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-mk.maintscript b/debian/libreoffice-l10n-mk.maintscript new file mode 100644 index 00000000000..597b3b75b39 --- /dev/null +++ b/debian/libreoffice-l10n-mk.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-mk /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-ml.maintscript b/debian/libreoffice-l10n-ml.maintscript new file mode 100644 index 00000000000..1c377d55840 --- /dev/null +++ b/debian/libreoffice-l10n-ml.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-ml /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-mn.maintscript b/debian/libreoffice-l10n-mn.maintscript new file mode 100644 index 00000000000..d1a6d0eb918 --- /dev/null +++ b/debian/libreoffice-l10n-mn.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-mn /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-mr.maintscript b/debian/libreoffice-l10n-mr.maintscript new file mode 100644 index 00000000000..e2c755e9261 --- /dev/null +++ b/debian/libreoffice-l10n-mr.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-mr /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-nb.maintscript b/debian/libreoffice-l10n-nb.maintscript new file mode 100644 index 00000000000..db282443662 --- /dev/null +++ b/debian/libreoffice-l10n-nb.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-nb /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-ne.maintscript b/debian/libreoffice-l10n-ne.maintscript new file mode 100644 index 00000000000..464ae4b6596 --- /dev/null +++ b/debian/libreoffice-l10n-ne.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-ne /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-nl.maintscript b/debian/libreoffice-l10n-nl.maintscript new file mode 100644 index 00000000000..700d4976abc --- /dev/null +++ b/debian/libreoffice-l10n-nl.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-nl /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-nn.maintscript b/debian/libreoffice-l10n-nn.maintscript new file mode 100644 index 00000000000..b5f2d1700a6 --- /dev/null +++ b/debian/libreoffice-l10n-nn.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-nn /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-nr.maintscript b/debian/libreoffice-l10n-nr.maintscript new file mode 100644 index 00000000000..b619763e618 --- /dev/null +++ b/debian/libreoffice-l10n-nr.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-nr /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-nso.maintscript b/debian/libreoffice-l10n-nso.maintscript new file mode 100644 index 00000000000..bb4394ed373 --- /dev/null +++ b/debian/libreoffice-l10n-nso.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-nso /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-oc.maintscript b/debian/libreoffice-l10n-oc.maintscript new file mode 100644 index 00000000000..b71f2f337b0 --- /dev/null +++ b/debian/libreoffice-l10n-oc.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-oc /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-om.maintscript b/debian/libreoffice-l10n-om.maintscript new file mode 100644 index 00000000000..976dc254be2 --- /dev/null +++ b/debian/libreoffice-l10n-om.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-om /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-or.maintscript b/debian/libreoffice-l10n-or.maintscript new file mode 100644 index 00000000000..b3b20c55b04 --- /dev/null +++ b/debian/libreoffice-l10n-or.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-or /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-pa-in.maintscript b/debian/libreoffice-l10n-pa-in.maintscript new file mode 100644 index 00000000000..3cf7b3bfb58 --- /dev/null +++ b/debian/libreoffice-l10n-pa-in.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-pa-in /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-pl.maintscript b/debian/libreoffice-l10n-pl.maintscript new file mode 100644 index 00000000000..08b60dc449d --- /dev/null +++ b/debian/libreoffice-l10n-pl.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-pl /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-pt-br.maintscript b/debian/libreoffice-l10n-pt-br.maintscript new file mode 100644 index 00000000000..f7541ad333e --- /dev/null +++ b/debian/libreoffice-l10n-pt-br.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-pt-br /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-pt.maintscript b/debian/libreoffice-l10n-pt.maintscript new file mode 100644 index 00000000000..fb7c10cd21c --- /dev/null +++ b/debian/libreoffice-l10n-pt.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-pt /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-ro.maintscript b/debian/libreoffice-l10n-ro.maintscript new file mode 100644 index 00000000000..0d5acb33b06 --- /dev/null +++ b/debian/libreoffice-l10n-ro.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-ro /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-ru.maintscript b/debian/libreoffice-l10n-ru.maintscript new file mode 100644 index 00000000000..1956e1c32f4 --- /dev/null +++ b/debian/libreoffice-l10n-ru.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-ru /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-rw.maintscript b/debian/libreoffice-l10n-rw.maintscript new file mode 100644 index 00000000000..545193530b2 --- /dev/null +++ b/debian/libreoffice-l10n-rw.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-rw /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-si.maintscript b/debian/libreoffice-l10n-si.maintscript new file mode 100644 index 00000000000..092ada5e4e9 --- /dev/null +++ b/debian/libreoffice-l10n-si.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-si /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-sk.maintscript b/debian/libreoffice-l10n-sk.maintscript new file mode 100644 index 00000000000..f2913ab5acf --- /dev/null +++ b/debian/libreoffice-l10n-sk.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-sk /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-sl.maintscript b/debian/libreoffice-l10n-sl.maintscript new file mode 100644 index 00000000000..301770cf62b --- /dev/null +++ b/debian/libreoffice-l10n-sl.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-sl /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-sr.maintscript b/debian/libreoffice-l10n-sr.maintscript new file mode 100644 index 00000000000..761543ff8e5 --- /dev/null +++ b/debian/libreoffice-l10n-sr.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-sr /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-ss.maintscript b/debian/libreoffice-l10n-ss.maintscript new file mode 100644 index 00000000000..349d0a7839a --- /dev/null +++ b/debian/libreoffice-l10n-ss.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-ss /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-st.maintscript b/debian/libreoffice-l10n-st.maintscript new file mode 100644 index 00000000000..e5a9f05ee59 --- /dev/null +++ b/debian/libreoffice-l10n-st.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-st /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-sv.maintscript b/debian/libreoffice-l10n-sv.maintscript new file mode 100644 index 00000000000..0f6f76c0f9b --- /dev/null +++ b/debian/libreoffice-l10n-sv.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-sv /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-ta.maintscript b/debian/libreoffice-l10n-ta.maintscript new file mode 100644 index 00000000000..799d8537247 --- /dev/null +++ b/debian/libreoffice-l10n-ta.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-ta /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-te.maintscript b/debian/libreoffice-l10n-te.maintscript new file mode 100644 index 00000000000..ed90e6e43ac --- /dev/null +++ b/debian/libreoffice-l10n-te.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-te /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-tg.maintscript b/debian/libreoffice-l10n-tg.maintscript new file mode 100644 index 00000000000..6c51ccf65be --- /dev/null +++ b/debian/libreoffice-l10n-tg.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-tg /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-th.maintscript b/debian/libreoffice-l10n-th.maintscript new file mode 100644 index 00000000000..fa87878f140 --- /dev/null +++ b/debian/libreoffice-l10n-th.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-th /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-tn.maintscript b/debian/libreoffice-l10n-tn.maintscript new file mode 100644 index 00000000000..b64f5ded3c4 --- /dev/null +++ b/debian/libreoffice-l10n-tn.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-tn /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-tr.maintscript b/debian/libreoffice-l10n-tr.maintscript new file mode 100644 index 00000000000..b41b6e9ae04 --- /dev/null +++ b/debian/libreoffice-l10n-tr.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-tr /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-ts.maintscript b/debian/libreoffice-l10n-ts.maintscript new file mode 100644 index 00000000000..b6596f519d2 --- /dev/null +++ b/debian/libreoffice-l10n-ts.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-ts /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-ug.maintscript b/debian/libreoffice-l10n-ug.maintscript new file mode 100644 index 00000000000..7a295b33fa2 --- /dev/null +++ b/debian/libreoffice-l10n-ug.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-ug /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-uk.maintscript b/debian/libreoffice-l10n-uk.maintscript new file mode 100644 index 00000000000..2436b0da19e --- /dev/null +++ b/debian/libreoffice-l10n-uk.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-uk /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-uz.maintscript b/debian/libreoffice-l10n-uz.maintscript new file mode 100644 index 00000000000..bf8c49dd17b --- /dev/null +++ b/debian/libreoffice-l10n-uz.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-uz /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-ve.maintscript b/debian/libreoffice-l10n-ve.maintscript new file mode 100644 index 00000000000..1c772524a52 --- /dev/null +++ b/debian/libreoffice-l10n-ve.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-ve /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-vi.maintscript b/debian/libreoffice-l10n-vi.maintscript new file mode 100644 index 00000000000..0d15db97c40 --- /dev/null +++ b/debian/libreoffice-l10n-vi.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-vi /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-xh.maintscript b/debian/libreoffice-l10n-xh.maintscript new file mode 100644 index 00000000000..3803ac4ffca --- /dev/null +++ b/debian/libreoffice-l10n-xh.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-xh /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-za.lintian-overrides b/debian/libreoffice-l10n-za.lintian-overrides new file mode 100644 index 00000000000..3c1bc8861b3 --- /dev/null +++ b/debian/libreoffice-l10n-za.lintian-overrides @@ -0,0 +1,2 @@ +# this is a metapackage, so actually "metapackages" is correct, IMHO +libreoffice-l10n-za: wrong-section-according-to-package-name libreoffice-l10n-za => localization diff --git a/debian/libreoffice-l10n-za.maintscript b/debian/libreoffice-l10n-za.maintscript new file mode 100644 index 00000000000..8a568e69e61 --- /dev/null +++ b/debian/libreoffice-l10n-za.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-za /usr/share/doc/libreoffice-common 1:6.4.0-1 diff --git a/debian/libreoffice-l10n-zh-cn.maintscript b/debian/libreoffice-l10n-zh-cn.maintscript new file mode 100644 index 00000000000..a74dbb38dd1 --- /dev/null +++ b/debian/libreoffice-l10n-zh-cn.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-zh-cn /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-zh-tw.maintscript b/debian/libreoffice-l10n-zh-tw.maintscript new file mode 100644 index 00000000000..e2b741c2661 --- /dev/null +++ b/debian/libreoffice-l10n-zh-tw.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-zh-tw /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n-zu.maintscript b/debian/libreoffice-l10n-zu.maintscript new file mode 100644 index 00000000000..d796b050006 --- /dev/null +++ b/debian/libreoffice-l10n-zu.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-l10n-zu /usr/share/doc/libreoffice-common 1:6.4.0~rc1~git20191209 diff --git a/debian/libreoffice-l10n.ucf.in b/debian/libreoffice-l10n.ucf.in new file mode 100644 index 00000000000..ed228509b74 --- /dev/null +++ b/debian/libreoffice-l10n.ucf.in @@ -0,0 +1,3 @@ +/usr/lib/libreoffice/share/.registry/Langpack-@ISO@.xcd /etc/libreoffice/registry/Langpack-@ISO@.xcd +/usr/lib/libreoffice/share/.registry/res/fcfg_langpack_@ISO@.xcd /etc/libreoffice/registry/res/fcfg_langpack_@ISO@.xcd +/usr/lib/libreoffice/share/.registry/res/registry_@ISO@.xcd /etc/libreoffice/registry/res/registry_@ISO@.xcd diff --git a/debian/libreoffice-librelogo.ucf b/debian/libreoffice-librelogo.ucf new file mode 100644 index 00000000000..e2300cf795d --- /dev/null +++ b/debian/libreoffice-librelogo.ucf @@ -0,0 +1 @@ +/usr/lib/libreoffice/share/.registry/librelogo.xcd /etc/libreoffice/registry/librelogo.xcd diff --git a/debian/libreoffice-math-nogui.bug-control b/debian/libreoffice-math-nogui.bug-control new file mode 100644 index 00000000000..1ac405f9788 --- /dev/null +++ b/debian/libreoffice-math-nogui.bug-control @@ -0,0 +1 @@ +report-with: libreoffice-core diff --git a/debian/libreoffice-math-nogui.mime b/debian/libreoffice-math-nogui.mime new file mode 100644 index 00000000000..ea648287795 --- /dev/null +++ b/debian/libreoffice-math-nogui.mime @@ -0,0 +1,14 @@ +### +# shared-mime-info + +# Generic +text/mathml; soffice --nologo --math %s; edit=soffice --nologo --math %s; test=test -n "$DISPLAY"; description="MathML Formula"; nametemplate=%s.mml; priority=3 + +# OASIS OpenDocument Format +application/vnd.oasis.opendocument.formula; soffice --nologo --math %s; edit=soffice --nologo --math %s; print=soffice --nologo --math -p %s; test=test -n "$DISPLAY"; description="OpenDocument Formula"; nametemplate=%s.odf; priority=9 + +# OpenOffice.org 1.0 +application/vnd.sun.xml.math; soffice --nologo --math %s; edit=soffice --nologo --math %s; test=test -n "$DISPLAY"; description="OpenOffice.org Formula"; nametemplate=%s.sxm; priority=8 + +# +### diff --git a/debian/libreoffice-math-nogui.ucf b/debian/libreoffice-math-nogui.ucf new file mode 100644 index 00000000000..3ee48a87f1c --- /dev/null +++ b/debian/libreoffice-math-nogui.ucf @@ -0,0 +1 @@ +/usr/lib/libreoffice/share/.registry/math.xcd /etc/libreoffice/registry/math.xcd diff --git a/debian/libreoffice-math.bug-control b/debian/libreoffice-math.bug-control new file mode 100644 index 00000000000..1ac405f9788 --- /dev/null +++ b/debian/libreoffice-math.bug-control @@ -0,0 +1 @@ +report-with: libreoffice-core diff --git a/debian/libreoffice-math.lintian-overrides b/debian/libreoffice-math.lintian-overrides new file mode 100644 index 00000000000..bf3665b50c3 --- /dev/null +++ b/debian/libreoffice-math.lintian-overrides @@ -0,0 +1 @@ +libreoffice-math: desktop-command-not-in-package usr/share/applications/libreoffice-math.desktop libreoffice diff --git a/debian/libreoffice-math.maintscript b/debian/libreoffice-math.maintscript new file mode 100644 index 00000000000..9dbb1675652 --- /dev/null +++ b/debian/libreoffice-math.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-math /usr/share/doc/libreoffice-core 1:6.4.0~alpha1~git20191013 diff --git a/debian/libreoffice-math.manpages b/debian/libreoffice-math.manpages new file mode 100644 index 00000000000..6798b1e6b4e --- /dev/null +++ b/debian/libreoffice-math.manpages @@ -0,0 +1 @@ +debian/tmp/usr/share/man/man1/lomath.1.gz diff --git a/debian/libreoffice-math.mime b/debian/libreoffice-math.mime new file mode 100644 index 00000000000..ea648287795 --- /dev/null +++ b/debian/libreoffice-math.mime @@ -0,0 +1,14 @@ +### +# shared-mime-info + +# Generic +text/mathml; soffice --nologo --math %s; edit=soffice --nologo --math %s; test=test -n "$DISPLAY"; description="MathML Formula"; nametemplate=%s.mml; priority=3 + +# OASIS OpenDocument Format +application/vnd.oasis.opendocument.formula; soffice --nologo --math %s; edit=soffice --nologo --math %s; print=soffice --nologo --math -p %s; test=test -n "$DISPLAY"; description="OpenDocument Formula"; nametemplate=%s.odf; priority=9 + +# OpenOffice.org 1.0 +application/vnd.sun.xml.math; soffice --nologo --math %s; edit=soffice --nologo --math %s; test=test -n "$DISPLAY"; description="OpenOffice.org Formula"; nametemplate=%s.sxm; priority=8 + +# +### diff --git a/debian/libreoffice-math.ucf b/debian/libreoffice-math.ucf new file mode 100644 index 00000000000..3ee48a87f1c --- /dev/null +++ b/debian/libreoffice-math.ucf @@ -0,0 +1 @@ +/usr/lib/libreoffice/share/.registry/math.xcd /etc/libreoffice/registry/math.xcd diff --git a/debian/libreoffice-mysql-connector.maintscript b/debian/libreoffice-mysql-connector.maintscript new file mode 100644 index 00000000000..92715c940b7 --- /dev/null +++ b/debian/libreoffice-mysql-connector.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-mysql-connector /usr/share/doc/libreoffice-core 1:6.4.0~alpha1~git20191013 diff --git a/debian/libreoffice-nlpsolver.bug-script.in b/debian/libreoffice-nlpsolver.bug-script.in new file mode 100755 index 00000000000..84085335315 --- /dev/null +++ b/debian/libreoffice-nlpsolver.bug-script.in @@ -0,0 +1,2 @@ +#!/bin/sh +/usr/lib/libreoffice/program/unopkg list --bundled com.sun.star.comp.Calc.NLPSolver >&3 diff --git a/debian/libreoffice-nlpsolver.lintian-overrides b/debian/libreoffice-nlpsolver.lintian-overrides new file mode 100644 index 00000000000..447d371403f --- /dev/null +++ b/debian/libreoffice-nlpsolver.lintian-overrides @@ -0,0 +1 @@ +libreoffice-nlpsolver: jar-not-in-usr-share usr/lib/libreoffice/share/extensions/nlpsolver/help/*/help.jar diff --git a/debian/libreoffice-officebean.maintscript b/debian/libreoffice-officebean.maintscript new file mode 100644 index 00000000000..eec3d3bc150 --- /dev/null +++ b/debian/libreoffice-officebean.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-officebean /usr/share/doc/libreoffice-core 1:6.4.0~alpha1~git20191013 diff --git a/debian/libreoffice-plasma.maintscript b/debian/libreoffice-plasma.maintscript new file mode 100644 index 00000000000..8c7e556f54b --- /dev/null +++ b/debian/libreoffice-plasma.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-plasma /usr/share/doc/libreoffice-core 1:6.4.0~alpha1~git20191013 diff --git a/debian/libreoffice-qt5.maintscript b/debian/libreoffice-qt5.maintscript new file mode 100644 index 00000000000..4e11d0bcdc7 --- /dev/null +++ b/debian/libreoffice-qt5.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-qt5 /usr/share/doc/libreoffice-core 1:6.4.0~alpha1~git20191013 diff --git a/debian/libreoffice-report-builder-bin.maintscript b/debian/libreoffice-report-builder-bin.maintscript new file mode 100644 index 00000000000..c31cc3b6c40 --- /dev/null +++ b/debian/libreoffice-report-builder-bin.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-report-builder-bin /usr/share/doc/libreoffice-core 1:6.4.0~alpha1~git20191013 diff --git a/debian/libreoffice-report-builder.bug-control b/debian/libreoffice-report-builder.bug-control new file mode 100644 index 00000000000..48ef942e313 --- /dev/null +++ b/debian/libreoffice-report-builder.bug-control @@ -0,0 +1 @@ +report-with: libreoffice-base diff --git a/debian/libreoffice-report-builder.maintscript b/debian/libreoffice-report-builder.maintscript new file mode 100644 index 00000000000..d2d3e3371e3 --- /dev/null +++ b/debian/libreoffice-report-builder.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-report-builder /usr/share/doc/libreoffice-common 1:6.4.0~alpha1~git20191013 diff --git a/debian/libreoffice-report-builder.ucf b/debian/libreoffice-report-builder.ucf new file mode 100644 index 00000000000..60247c8f4aa --- /dev/null +++ b/debian/libreoffice-report-builder.ucf @@ -0,0 +1 @@ +/usr/lib/libreoffice/share/.registry/reportbuilder.xcd /etc/libreoffice/registry/reportbuilder.xcd diff --git a/debian/libreoffice-script-provider-bsh.maintscript b/debian/libreoffice-script-provider-bsh.maintscript new file mode 100644 index 00000000000..0c4d00fde2f --- /dev/null +++ b/debian/libreoffice-script-provider-bsh.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-script-provider-bsh /usr/share/doc/libreoffice-common 1:6.4.0~alpha1~git20191013 diff --git a/debian/libreoffice-script-provider-js.maintscript b/debian/libreoffice-script-provider-js.maintscript new file mode 100644 index 00000000000..db3fd3c0191 --- /dev/null +++ b/debian/libreoffice-script-provider-js.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-script-provider-js /usr/share/doc/libreoffice-common 1:6.4.0~alpha1~git20191013 diff --git a/debian/libreoffice-script-provider-python.bug-control b/debian/libreoffice-script-provider-python.bug-control new file mode 100644 index 00000000000..38da481c1f2 --- /dev/null +++ b/debian/libreoffice-script-provider-python.bug-control @@ -0,0 +1 @@ +report-with: python-uno python3-uno diff --git a/debian/libreoffice-script-provider-python.maintscript b/debian/libreoffice-script-provider-python.maintscript new file mode 100644 index 00000000000..64f0371e035 --- /dev/null +++ b/debian/libreoffice-script-provider-python.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-script-provider-python /usr/share/doc/libreoffice-common 1:6.4.0~alpha1~git20191013 diff --git a/debian/libreoffice-sdbc-firebird.NEWS b/debian/libreoffice-sdbc-firebird.NEWS new file mode 100644 index 00000000000..00d810308fa --- /dev/null +++ b/debian/libreoffice-sdbc-firebird.NEWS @@ -0,0 +1,21 @@ +libreoffice (1:5.3.0~alpha1-1) experimental; urgency=low + + * LibreOffice switched from Firebird 2.5 to Firebird 3. Unfortunately + the format used by the Firebird 2.5 code (fdb - the native on-disk format) + is NOT compatible with the "new" one (the archive format). LibreOffice 5.3 + can NOT read older .odbs having .fdb embedded. + + Some future firebird version might have a way to convert itself/make LO + able to convert but until then you need to convert manually as follows: + + You need the gbak tool from firebird2.5: + https://packages.debian.org/search?searchon=contents&keywords=gbak&mode=exactfilename&suite=oldstable&arch=any + + Then execute: + unzip -d oldFirebird.odb temp; + gbak -b temp/database/firebird.fdb temp/database/firebird.fbk; + rm temp/database/firebird.fdb + zip -FSr oldFirebird.odb temp; + rm -r temp; + + -- Rene Engelhard Mon, 28 Nov 2016 10:27:15 +0200 diff --git a/debian/libreoffice-sdbc-firebird.maintscript b/debian/libreoffice-sdbc-firebird.maintscript new file mode 100644 index 00000000000..b59864812c9 --- /dev/null +++ b/debian/libreoffice-sdbc-firebird.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-sdbc-firebird /usr/share/doc/libreoffice-core 1:6.4.0~alpha1~git20191013 diff --git a/debian/libreoffice-sdbc-hsqldb.maintscript b/debian/libreoffice-sdbc-hsqldb.maintscript new file mode 100644 index 00000000000..007b4a273f1 --- /dev/null +++ b/debian/libreoffice-sdbc-hsqldb.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-sdbc-hsqldb /usr/share/doc/libreoffice-core 1:6.4.0~alpha1~git20191013 diff --git a/debian/libreoffice-sdbc-mysql.maintscript b/debian/libreoffice-sdbc-mysql.maintscript new file mode 100644 index 00000000000..7e4102688b0 --- /dev/null +++ b/debian/libreoffice-sdbc-mysql.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-sdbc-mysql /usr/share/doc/libreoffice-core 1:6.4.0~alpha1~git20191013 diff --git a/debian/libreoffice-sdbc-postgresql.maintscript b/debian/libreoffice-sdbc-postgresql.maintscript new file mode 100644 index 00000000000..923b4b4248d --- /dev/null +++ b/debian/libreoffice-sdbc-postgresql.maintscript @@ -0,0 +1,2 @@ +symlink_to_dir /usr/share/doc/libreoffice-sdbc-postgresql /usr/share/doc/libreoffice-core 1:6.4.0~alpha1~git20191013 +rm_conffile /etc/libreoffice/postgresql-sdbc.ini 1:6.4.0~alpha1~git20191027 diff --git a/debian/libreoffice-sdbc-postgresql.ucf b/debian/libreoffice-sdbc-postgresql.ucf new file mode 100644 index 00000000000..81b5d510f2c --- /dev/null +++ b/debian/libreoffice-sdbc-postgresql.ucf @@ -0,0 +1 @@ +/usr/lib/libreoffice/share/.registry/postgresql.xcd /etc/libreoffice/registry/postgresql.xcd diff --git a/debian/libreoffice-style-breeze.maintscript b/debian/libreoffice-style-breeze.maintscript new file mode 100644 index 00000000000..a124622c3fa --- /dev/null +++ b/debian/libreoffice-style-breeze.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-style-breeze /usr/share/doc/libreoffice-common 1:6.4.0~alpha1~git20191013 diff --git a/debian/libreoffice-style-colibre.maintscript b/debian/libreoffice-style-colibre.maintscript new file mode 100644 index 00000000000..26f3ed60c10 --- /dev/null +++ b/debian/libreoffice-style-colibre.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-style-colibre /usr/share/doc/libreoffice-common 1:6.4.0~alpha1~git20191013 diff --git a/debian/libreoffice-style-elementary.maintscript b/debian/libreoffice-style-elementary.maintscript new file mode 100644 index 00000000000..82d78895a5f --- /dev/null +++ b/debian/libreoffice-style-elementary.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-style-elementary /usr/share/doc/libreoffice-common 1:6.4.0~alpha1~git20191013 diff --git a/debian/libreoffice-style-karasa-jaga.maintscript b/debian/libreoffice-style-karasa-jaga.maintscript new file mode 100644 index 00000000000..c3e34cfbbee --- /dev/null +++ b/debian/libreoffice-style-karasa-jaga.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-style-karasa-jaga /usr/share/doc/libreoffice-common 1:6.4.0~alpha1~git20191013 diff --git a/debian/libreoffice-style-sifr.maintscript b/debian/libreoffice-style-sifr.maintscript new file mode 100644 index 00000000000..ff95171c6e5 --- /dev/null +++ b/debian/libreoffice-style-sifr.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-style-sifr /usr/share/doc/libreoffice-common 1:6.4.0~alpha1~git20191013 diff --git a/debian/libreoffice-style-tango.maintscript b/debian/libreoffice-style-tango.maintscript new file mode 100644 index 00000000000..886e586861f --- /dev/null +++ b/debian/libreoffice-style-tango.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-style-tango /usr/share/doc/libreoffice-common 1:6.4.0~alpha1~git20191013 diff --git a/debian/libreoffice-subsequentcheckbase.maintscript b/debian/libreoffice-subsequentcheckbase.maintscript new file mode 100644 index 00000000000..e4f4547d183 --- /dev/null +++ b/debian/libreoffice-subsequentcheckbase.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-subsequentcheckbase /usr/share/doc/libreoffice-common 1:6.4.0~alpha1~git20191013 diff --git a/debian/libreoffice-wiki-publisher.bug-script.in b/debian/libreoffice-wiki-publisher.bug-script.in new file mode 100755 index 00000000000..9497e5ca079 --- /dev/null +++ b/debian/libreoffice-wiki-publisher.bug-script.in @@ -0,0 +1,2 @@ +#!/bin/sh +/usr/lib/libreoffice/program/unopkg list --bundled com.sun.wiki-publisher >&3 diff --git a/debian/libreoffice-wiki-publisher.lintian-overrides b/debian/libreoffice-wiki-publisher.lintian-overrides new file mode 100644 index 00000000000..82dc8202233 --- /dev/null +++ b/debian/libreoffice-wiki-publisher.lintian-overrides @@ -0,0 +1 @@ +libreoffice-wiki-publisher: jar-not-in-usr-share usr/lib/libreoffice/share/extensions/wiki-publisher/help/*/help.jar diff --git a/debian/libreoffice-writer-nogui.bug-control b/debian/libreoffice-writer-nogui.bug-control new file mode 100644 index 00000000000..1ac405f9788 --- /dev/null +++ b/debian/libreoffice-writer-nogui.bug-control @@ -0,0 +1 @@ +report-with: libreoffice-core diff --git a/debian/libreoffice-writer-nogui.mime b/debian/libreoffice-writer-nogui.mime new file mode 100644 index 00000000000..fb38a25029d --- /dev/null +++ b/debian/libreoffice-writer-nogui.mime @@ -0,0 +1,37 @@ +### +# shared-mime-info + +# Generic +application/rtf; soffice --nologo --writer %s; edit=soffice --nologo --writer %s; test=test -n "$DISPLAY"; description="Rich Text Format"; nametemplate=%s.rtf; priority=3 +application/x-extension-txt; soffice --nologo --writer %s; edit=soffice --nologo --writer %s; test=test -n "$DISPLAY"; description="Plain Text Document"; nametemplate=%s.txt; priority=3 +application/x-t602; soffice --nologo --writer %s; edit=soffice --nologo --writer %s; test=test -n "$DISPLAY"; description="T602 Document"; nametemplate=%s.602; priority=3 + +# Corel WordPerfect +application/vnd.wordperfect; soffice --nologo --writer %s; edit=soffice --nologo --writer %s; test=test -n "$DISPLAY"; description="WordPerfect Document"; nametemplate=%s.wp; priority=3 + +# ECMA Office Open XML (Microsoft Office 2007) +application/vnd.ms-word.document.macroEnabled.12; soffice --nologo --writer %s; edit=soffice --nologo --writer %s; test=test -n "$DISPLAY"; description="Office Open XML Document with Macros Enabled"; nametemplate=%s.docm; priority=3 +application/vnd.ms-word.template.macroEnabled.12; soffice --nologo --writer %s; edit=soffice --nologo --writer %s; test=test -n "$DISPLAY"; description="Office Open XML Document Template with Macros Enabled"; nametemplate=%s.dotm; priority=3 +application/vnd.openxmlformats-officedocument.wordprocessingml.document; soffice --nologo --writer %s; edit=soffice --nologo --writer %s; test=test -n "$DISPLAY"; description="Office Open XML Document"; nametemplate=%s.docx; priority=3 +application/vnd.openxmlformats-officedocument.wordprocessingml.template; soffice --nologo --writer %s; edit=soffice --nologo --writer %s; test=test -n "$DISPLAY"; description="Office Open XML Document Template"; nametemplate=%s.dotx; priority=3 + +# Microsoft Word +application/msword; soffice --nologo --writer %s; edit=soffice --nologo --writer %s; test=test -n "$DISPLAY"; description="Microsoft Word Document"; nametemplate=%s.doc; priority=3 + +# Microsoft Works +application/vnd.ms-works; soffice --nologo --writer %s; edit=soffice --nologo --writer %s; test=test -n "$DISPLAY"; description="Microsoft Works Document"; nametemplate=%s.wps; priority=3 + +# OASIS OpenDocument Format +application/vnd.oasis.opendocument.text; soffice --nologo --writer %s; edit=soffice --nologo --writer %s; print=soffice --nologo --writer -p %s; test=test -n "$DISPLAY"; description="OpenDocument Text Document"; nametemplate=%s.odt; priority=9 +application/vnd.oasis.opendocument.text-master; soffice --nologo --global %s; edit=soffice --nologo --writer %s; print=soffice --nologo --writer -p %s; test=test -n "$DISPLAY"; description="OpenDocument Master Document"; nametemplate=%s.odm; priority=9 +application/vnd.oasis.opendocument.text-template; soffice --nologo --writer %s; edit=soffice --nologo --writer %s; print=soffice --nologo --writer -p %s; test=test -n "$DISPLAY"; description="OpenDocument Text Document Template"; nametemplate=%s.ott; priority=9 +application/vnd.oasis.opendocument.text-web; soffice --nologo --web %s; edit=soffice --nologo --web %s; print=soffice --nologo --web -p %s; test=test -n "$DISPLAY"; description="OpenDocument HTML Document Template"; nametemplate=%s.oth; priority=9 + +# OpenOffice.org 1.0 +application/vnd.sun.xml.writer; soffice --nologo --writer %s; edit=soffice --nologo --writer %s; description="OpenOffice.org Text Document"; nametemplate=%s.sxw; priority=8 +application/vnd.sun.xml.writer.global; soffice --nologo --global %s; edit=soffice --nologo --writer %s; description="OpenOffice.org Master Document"; nametemplate=%s.sxg; priority=8 +application/vnd.sun.xml.writer.template; soffice --nologo --writer %s; edit=soffice --nologo --writer %s; description="OpenOffice.org Text Document Template"; nametemplate=%s.stw; priority=8 + +# +### + diff --git a/debian/libreoffice-writer-nogui.ucf b/debian/libreoffice-writer-nogui.ucf new file mode 100644 index 00000000000..1b9239ce8f3 --- /dev/null +++ b/debian/libreoffice-writer-nogui.ucf @@ -0,0 +1 @@ +/usr/lib/libreoffice/share/.registry/writer.xcd /etc/libreoffice/registry/writer.xcd diff --git a/debian/libreoffice-writer.bug-control b/debian/libreoffice-writer.bug-control new file mode 100644 index 00000000000..1ac405f9788 --- /dev/null +++ b/debian/libreoffice-writer.bug-control @@ -0,0 +1 @@ +report-with: libreoffice-core diff --git a/debian/libreoffice-writer.lintian-overrides b/debian/libreoffice-writer.lintian-overrides new file mode 100644 index 00000000000..08563077e14 --- /dev/null +++ b/debian/libreoffice-writer.lintian-overrides @@ -0,0 +1 @@ +libreoffice-writer: desktop-command-not-in-package usr/share/applications/libreoffice-writer.desktop libreoffice diff --git a/debian/libreoffice-writer.maintscript b/debian/libreoffice-writer.maintscript new file mode 100644 index 00000000000..829e8be5d3d --- /dev/null +++ b/debian/libreoffice-writer.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreoffice-writer /usr/share/doc/libreoffice-core 1:6.4.0~alpha1~git20191013 diff --git a/debian/libreoffice-writer.manpages b/debian/libreoffice-writer.manpages new file mode 100644 index 00000000000..53c4e248a63 --- /dev/null +++ b/debian/libreoffice-writer.manpages @@ -0,0 +1,3 @@ +debian/tmp/usr/share/man/man1/loweb.1.gz +debian/tmp/usr/share/man/man1/lowriter.1.gz + diff --git a/debian/libreoffice-writer.mime b/debian/libreoffice-writer.mime new file mode 100644 index 00000000000..fb38a25029d --- /dev/null +++ b/debian/libreoffice-writer.mime @@ -0,0 +1,37 @@ +### +# shared-mime-info + +# Generic +application/rtf; soffice --nologo --writer %s; edit=soffice --nologo --writer %s; test=test -n "$DISPLAY"; description="Rich Text Format"; nametemplate=%s.rtf; priority=3 +application/x-extension-txt; soffice --nologo --writer %s; edit=soffice --nologo --writer %s; test=test -n "$DISPLAY"; description="Plain Text Document"; nametemplate=%s.txt; priority=3 +application/x-t602; soffice --nologo --writer %s; edit=soffice --nologo --writer %s; test=test -n "$DISPLAY"; description="T602 Document"; nametemplate=%s.602; priority=3 + +# Corel WordPerfect +application/vnd.wordperfect; soffice --nologo --writer %s; edit=soffice --nologo --writer %s; test=test -n "$DISPLAY"; description="WordPerfect Document"; nametemplate=%s.wp; priority=3 + +# ECMA Office Open XML (Microsoft Office 2007) +application/vnd.ms-word.document.macroEnabled.12; soffice --nologo --writer %s; edit=soffice --nologo --writer %s; test=test -n "$DISPLAY"; description="Office Open XML Document with Macros Enabled"; nametemplate=%s.docm; priority=3 +application/vnd.ms-word.template.macroEnabled.12; soffice --nologo --writer %s; edit=soffice --nologo --writer %s; test=test -n "$DISPLAY"; description="Office Open XML Document Template with Macros Enabled"; nametemplate=%s.dotm; priority=3 +application/vnd.openxmlformats-officedocument.wordprocessingml.document; soffice --nologo --writer %s; edit=soffice --nologo --writer %s; test=test -n "$DISPLAY"; description="Office Open XML Document"; nametemplate=%s.docx; priority=3 +application/vnd.openxmlformats-officedocument.wordprocessingml.template; soffice --nologo --writer %s; edit=soffice --nologo --writer %s; test=test -n "$DISPLAY"; description="Office Open XML Document Template"; nametemplate=%s.dotx; priority=3 + +# Microsoft Word +application/msword; soffice --nologo --writer %s; edit=soffice --nologo --writer %s; test=test -n "$DISPLAY"; description="Microsoft Word Document"; nametemplate=%s.doc; priority=3 + +# Microsoft Works +application/vnd.ms-works; soffice --nologo --writer %s; edit=soffice --nologo --writer %s; test=test -n "$DISPLAY"; description="Microsoft Works Document"; nametemplate=%s.wps; priority=3 + +# OASIS OpenDocument Format +application/vnd.oasis.opendocument.text; soffice --nologo --writer %s; edit=soffice --nologo --writer %s; print=soffice --nologo --writer -p %s; test=test -n "$DISPLAY"; description="OpenDocument Text Document"; nametemplate=%s.odt; priority=9 +application/vnd.oasis.opendocument.text-master; soffice --nologo --global %s; edit=soffice --nologo --writer %s; print=soffice --nologo --writer -p %s; test=test -n "$DISPLAY"; description="OpenDocument Master Document"; nametemplate=%s.odm; priority=9 +application/vnd.oasis.opendocument.text-template; soffice --nologo --writer %s; edit=soffice --nologo --writer %s; print=soffice --nologo --writer -p %s; test=test -n "$DISPLAY"; description="OpenDocument Text Document Template"; nametemplate=%s.ott; priority=9 +application/vnd.oasis.opendocument.text-web; soffice --nologo --web %s; edit=soffice --nologo --web %s; print=soffice --nologo --web -p %s; test=test -n "$DISPLAY"; description="OpenDocument HTML Document Template"; nametemplate=%s.oth; priority=9 + +# OpenOffice.org 1.0 +application/vnd.sun.xml.writer; soffice --nologo --writer %s; edit=soffice --nologo --writer %s; description="OpenOffice.org Text Document"; nametemplate=%s.sxw; priority=8 +application/vnd.sun.xml.writer.global; soffice --nologo --global %s; edit=soffice --nologo --writer %s; description="OpenOffice.org Master Document"; nametemplate=%s.sxg; priority=8 +application/vnd.sun.xml.writer.template; soffice --nologo --writer %s; edit=soffice --nologo --writer %s; description="OpenOffice.org Text Document Template"; nametemplate=%s.stw; priority=8 + +# +### + diff --git a/debian/libreoffice-writer.ucf b/debian/libreoffice-writer.ucf new file mode 100644 index 00000000000..1b9239ce8f3 --- /dev/null +++ b/debian/libreoffice-writer.ucf @@ -0,0 +1 @@ +/usr/lib/libreoffice/share/.registry/writer.xcd /etc/libreoffice/registry/writer.xcd diff --git a/debian/libreoffice.bug-control b/debian/libreoffice.bug-control new file mode 100644 index 00000000000..21ad6ad79a4 --- /dev/null +++ b/debian/libreoffice.bug-control @@ -0,0 +1,2 @@ +report-with: libreoffice-core libreoffice-writer libreoffice-calc libreoffice-base libreoffice-draw libreoffice-impress libreoffice-math + diff --git a/debian/libreofficekit-data.maintscript b/debian/libreofficekit-data.maintscript new file mode 100644 index 00000000000..3c2a9168289 --- /dev/null +++ b/debian/libreofficekit-data.maintscript @@ -0,0 +1 @@ +symlink_to_dir /usr/share/doc/libreofficekit-data /usr/share/doc/libreoffice-common 1:6.4.0~alpha1~git20191013 diff --git a/debian/libreofficekit-dev.docs b/debian/libreofficekit-dev.docs new file mode 100644 index 00000000000..d9f2643255b --- /dev/null +++ b/debian/libreofficekit-dev.docs @@ -0,0 +1 @@ +libreofficekit/README diff --git a/debian/libridl-java.lintian-overrides b/debian/libridl-java.lintian-overrides new file mode 100644 index 00000000000..73d383acd5e --- /dev/null +++ b/debian/libridl-java.lintian-overrides @@ -0,0 +1 @@ +libridl-java: codeless-jar usr/share/java/ridl-*.jar diff --git a/debian/libridl-java.poms b/debian/libridl-java.poms new file mode 100644 index 00000000000..40880baf584 --- /dev/null +++ b/debian/libridl-java.poms @@ -0,0 +1,28 @@ +# List of POM files for the package +# Format of this file is: +# [option]* +# where option can be: +# --ignore: ignore this POM and its artifact if any +# --ignore-pom: don't install the POM. To use on POM files that are created +# temporarily for certain artifacts such as Javadoc jars. [mh_install, mh_installpoms] +# --no-parent: remove the tag from the POM +# --package=: an alternative package to use when installing this POM +# and its artifact +# --has-package-version: to indicate that the original version of the POM is the same as the upstream part +# of the version for the package. +# --keep-elements=: a list of XML elements to keep in the POM +# during a clean operation with mh_cleanpom or mh_installpom +# --artifact=: path to the build artifact associated with this POM, +# it will be installed when using the command mh_install. [mh_install] +# --java-lib: install the jar into /usr/share/java to comply with Debian +# packaging guidelines +# --usj-name=: name to use when installing the library in /usr/share/java +# --usj-version=: version to use when installing the library in /usr/share/java +# --no-usj-versionless: don't install the versionless link in /usr/share/java +# --dest-jar=: the destination for the real jar. +# It will be installed with mh_install. [mh_install] +# --classifier=: Optional, the classifier for the jar. Empty by default. +# --site-xml=: Optional, the location for site.xml if it needs to be installed. +# Empty by default. [mh_install] +# +debian/pom.ridl.xml --no-parent --has-package-version diff --git a/debian/libuno-cppu3.symbols b/debian/libuno-cppu3.symbols new file mode 100644 index 00000000000..ff5b936500b --- /dev/null +++ b/debian/libuno-cppu3.symbols @@ -0,0 +1,9 @@ +libuno_cppu.so.3 libuno-cppu3 #MINVER# + (symver)UDK_3_0_0 1.4.0 + (symver)UDK_3.1 1.4.0 + (symver)UDK_3.2 1.4.0 + (symver)UDK_3.3 1.4.0 + (symver)LIBO_UDK_4.4 4.4.0~alpha +# add new stuff BELOW this line +# and note that the stuff above HAS NO epoch but the +# below HAS diff --git a/debian/libuno-cppuhelpergcc3-3.lintian-overrides b/debian/libuno-cppuhelpergcc3-3.lintian-overrides new file mode 100644 index 00000000000..569c47cfd4c --- /dev/null +++ b/debian/libuno-cppuhelpergcc3-3.lintian-overrides @@ -0,0 +1 @@ +libuno-cppuhelpergcc3-3: symbols-declares-dependency-on-other-package uno-libs-private diff --git a/debian/libuno-cppuhelpergcc3-3.symbols b/debian/libuno-cppuhelpergcc3-3.symbols new file mode 100644 index 00000000000..41510b3e80c --- /dev/null +++ b/debian/libuno-cppuhelpergcc3-3.symbols @@ -0,0 +1,15 @@ +libuno_cppuhelpergcc3.so.3 libuno-cppuhelpergcc3-3 #MINVER#, uno-libs-private + (symver)UDK_3_0_0 1.4.0 + (symver)UDK_3.1 1.4.0 + (symver)UDK_3.2 1.4.0 + (symver)UDK_3.3 1.4.0 + (symver)UDK_3.4 1.4.0 + (symver)UDK_3.5 1.4.0 + (symver)UDK_3.6 1.7.0 + (symver)UDK_3.7 3.4.0 + (symver)UDK_3.8 3.5.0~beta + (symver)LIBO_UDK_3.9 4.0.0~alpha + (symver)LIBO_UDK_5.3 5.3.0~alpha +# add new stuff BELOW this line +# and note that the stuff above HAS NO epoch but the +# below HAS diff --git a/debian/libuno-purpenvhelpergcc3-3.symbols b/debian/libuno-purpenvhelpergcc3-3.symbols new file mode 100644 index 00000000000..a6e7f57f0c7 --- /dev/null +++ b/debian/libuno-purpenvhelpergcc3-3.symbols @@ -0,0 +1,5 @@ +libuno_purpenvhelpergcc3.so.3 libuno-purpenvhelpergcc3-3 #MINVER# + (symver)UDK_3_0_0 1.4.0 +# add new stuff BELOW this line +# and note that the stuff above HAS NO epoch but the +# below HAS diff --git a/debian/libuno-sal3.symbols b/debian/libuno-sal3.symbols new file mode 100644 index 00000000000..60ee56aa7b9 --- /dev/null +++ b/debian/libuno-sal3.symbols @@ -0,0 +1,38 @@ +libuno_sal.so.3 libuno-sal3 #MINVER# + (symver)UDK_3_0_0 1.4.0 + (symver)UDK_3.1 1.4.0 + (symver)UDK_3.2 1.4.0 + (symver)UDK_3.3 1.4.0 + (symver)UDK_3.4 1.4.0 + (symver)UDK_3.5 1.4.0 + (symver)UDK_3.6 1.4.0 + (symver)UDK_3.7 1.4.0 + (symver)UDK_3.8 1.4.0 + (symver)UDK_3.9 1.5.0 + (symver)UDK_3.10 1.6.0 + UDK_3.11@UDK_3.11 1.7.0+LibO3.3.0~beta3 + osl_clearEnvironment@UDK_3.11 1.7.0+LibO3.3.0~beta3 + osl_setEnvironment@UDK_3.11 1.7.0+LibO3.3.0~beta3 + (symver)UDK_3.11 1.8.0 + (symver)PRIVATE_1.0 3.3.0~ + (symver)PRIVATE_1.1 3.3.0~ + (symver)LIBO_UDK_3.5 3.5.0~beta + (symver)PRIVATE_1.2 3.5.0~beta + (symver)PRIVATE_textenc.1 3.6.0~beta + (symver)LIBO_UDK_3.6 4.0.0~alpha + (symver)LIBO_UDK_4.0 4.0.0~beta + (symver)LIBO_UDK_4.1 4.1.0~alpha + (symver)LIBO_UDK_4.2 4.2.0~rc1 + (symver)LIBO_UDK_4.3 4.3.0~alpha + (symver)LIBO_UDK_5.0 5.0.0~alpha + (symver)LIBO_UDK_5.1 5.1.0~alpha + (symver)LIBO_UDK_5.2 5.2.0~alpha + (symver)LIBO_UDK_5.3 5.3.0~alpha + (symver)LIBO_UDK_6.2 6.2.0~alpha + (symver)PRIVATE_1.3 5.4.0~alpha + (symver)PRIVATE_1.4 6.0.0~alpha + (symver)PRIVATE_1.5 6.1.0~alpha + (symver)PRIVATE_1.6 6.4.0~beta +# add new stuff BELOW this line +# and note that the stuff above HAS NO epoch but the +# below HAS diff --git a/debian/libuno-salhelpergcc3-3.symbols b/debian/libuno-salhelpergcc3-3.symbols new file mode 100644 index 00000000000..e57ccbff6bc --- /dev/null +++ b/debian/libuno-salhelpergcc3-3.symbols @@ -0,0 +1,7 @@ +libuno_salhelpergcc3.so.3 libuno-salhelpergcc3-3 #MINVER# + (symver)UDK_3_0_0 1.4.0 + (symver)UDK_3.1 1.4.0 + (symver)LIBO_UDK_3.6 3.6.0~beta +# add new stuff BELOW this line +# and note that the stuff above HAS NO epoch but the +# below HAS diff --git a/debian/libunoil-java.lintian-overrides b/debian/libunoil-java.lintian-overrides new file mode 100644 index 00000000000..3c5ae462fc2 --- /dev/null +++ b/debian/libunoil-java.lintian-overrides @@ -0,0 +1 @@ +libunoil-java: codeless-jar usr/share/java/unoil-*.jar diff --git a/debian/libunoil-java.poms b/debian/libunoil-java.poms new file mode 100644 index 00000000000..fcc4eec6e4c --- /dev/null +++ b/debian/libunoil-java.poms @@ -0,0 +1,28 @@ +# List of POM files for the package +# Format of this file is: +# [option]* +# where option can be: +# --ignore: ignore this POM and its artifact if any +# --ignore-pom: don't install the POM. To use on POM files that are created +# temporarily for certain artifacts such as Javadoc jars. [mh_install, mh_installpoms] +# --no-parent: remove the tag from the POM +# --package=: an alternative package to use when installing this POM +# and its artifact +# --has-package-version: to indicate that the original version of the POM is the same as the upstream part +# of the version for the package. +# --keep-elements=: a list of XML elements to keep in the POM +# during a clean operation with mh_cleanpom or mh_installpom +# --artifact=: path to the build artifact associated with this POM, +# it will be installed when using the command mh_install. [mh_install] +# --java-lib: install the jar into /usr/share/java to comply with Debian +# packaging guidelines +# --usj-name=: name to use when installing the library in /usr/share/java +# --usj-version=: version to use when installing the library in /usr/share/java +# --no-usj-versionless: don't install the versionless link in /usr/share/java +# --dest-jar=: the destination for the real jar. +# It will be installed with mh_install. [mh_install] +# --classifier=: Optional, the classifier for the jar. Empty by default. +# --site-xml=: Optional, the location for site.xml if it needs to be installed. +# Empty by default. [mh_install] +# +debian/pom.unoil.xml --no-parent --has-package-version diff --git a/debian/libunoloader-java.poms b/debian/libunoloader-java.poms new file mode 100644 index 00000000000..e89019b4b1f --- /dev/null +++ b/debian/libunoloader-java.poms @@ -0,0 +1,28 @@ +# List of POM files for the package +# Format of this file is: +# [option]* +# where option can be: +# --ignore: ignore this POM and its artifact if any +# --ignore-pom: don't install the POM. To use on POM files that are created +# temporarily for certain artifacts such as Javadoc jars. [mh_install, mh_installpoms] +# --no-parent: remove the tag from the POM +# --package=: an alternative package to use when installing this POM +# and its artifact +# --has-package-version: to indicate that the original version of the POM is the same as the upstream part +# of the version for the package. +# --keep-elements=: a list of XML elements to keep in the POM +# during a clean operation with mh_cleanpom or mh_installpom +# --artifact=: path to the build artifact associated with this POM, +# it will be installed when using the command mh_install. [mh_install] +# --java-lib: install the jar into /usr/share/java to comply with Debian +# packaging guidelines +# --usj-name=: name to use when installing the library in /usr/share/java +# --usj-version=: version to use when installing the library in /usr/share/java +# --no-usj-versionless: don't install the versionless link in /usr/share/java +# --dest-jar=: the destination for the real jar. +# It will be installed with mh_install. [mh_install] +# --classifier=: Optional, the classifier for the jar. Empty by default. +# --site-xml=: Optional, the location for site.xml if it needs to be installed. +# Empty by default. [mh_install] +# +debian/pom.unoloader.xml --no-parent --has-package-version diff --git a/debian/patches/0001-CVE-2022-26305-compare-authors-using-Thumbprint.patch b/debian/patches/0001-CVE-2022-26305-compare-authors-using-Thumbprint.patch new file mode 100644 index 00000000000..e02b110f8fd --- /dev/null +++ b/debian/patches/0001-CVE-2022-26305-compare-authors-using-Thumbprint.patch @@ -0,0 +1,63 @@ +From 77f30ada1156ca1e1357776fea8e9dc113f6898d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Thu, 3 Mar 2022 14:22:37 +0000 +Subject: [PATCH 1/4] CVE-2022-26305 compare authors using Thumbprint + +Change-Id: I338f58eb07cbf0a3d13a7dafdaddac09252a8546 +Reviewed-on: https://gerrit.libreoffice.org/c/core/+/130929 +Tested-by: Jenkins +Reviewed-by: Miklos Vajna +(cherry picked from commit 65442205b5b274ad309308162f150f8d41648f72) +Reviewed-on: https://gerrit.libreoffice.org/c/core/+/130866 +Reviewed-by: Michael Stahl +(cherry picked from commit a7aaa78acea4c1d51283c2fce54ff9f5339026f8) +--- + .../component/documentdigitalsignatures.cxx | 23 +++++++++++++++---- + 1 file changed, 19 insertions(+), 4 deletions(-) + +diff --git a/xmlsecurity/source/component/documentdigitalsignatures.cxx b/xmlsecurity/source/component/documentdigitalsignatures.cxx +index b9066ea92cac..5a21c8421bec 100644 +--- a/xmlsecurity/source/component/documentdigitalsignatures.cxx ++++ b/xmlsecurity/source/component/documentdigitalsignatures.cxx +@@ -19,9 +19,10 @@ + + #include + +-#include ++#include + #include + #include ++#include + #include + #include + #include +@@ -666,9 +667,23 @@ sal_Bool DocumentDigitalSignatures::isAuthorTrusted( + Sequence< SvtSecurityOptions::Certificate > aTrustedAuthors = SvtSecurityOptions().GetTrustedAuthors(); + + return std::any_of(aTrustedAuthors.begin(), aTrustedAuthors.end(), +- [&xAuthor, &sSerialNum](const SvtSecurityOptions::Certificate& rAuthor) { +- return xmlsecurity::EqualDistinguishedNames(rAuthor[0], xAuthor->getIssuerName()) +- && ( rAuthor[1] == sSerialNum ); ++ [this, &xAuthor, &sSerialNum](const SvtSecurityOptions::Certificate& rAuthor) { ++ if (!xmlsecurity::EqualDistinguishedNames(rAuthor[0], xAuthor->getIssuerName())) ++ return false; ++ if (rAuthor[1] != sSerialNum) ++ return false; ++ ++ DocumentSignatureManager aSignatureManager(mxCtx, {}); ++ if (!aSignatureManager.init()) ++ return false; ++ uno::Reference xCert = aSignatureManager.getSecurityEnvironment()->createCertificateFromAscii(rAuthor[2]); ++ ++ auto pAuthor = dynamic_cast(xAuthor.get()); ++ auto pCert = dynamic_cast(xCert.get()); ++ if (pAuthor && pCert) ++ return pCert->getSHA256Thumbprint() == pAuthor->getSHA256Thumbprint(); ++ ++ return xCert->getSHA1Thumbprint() == xAuthor->getSHA1Thumbprint(); + }); + } + +-- +2.37.1 + diff --git a/debian/patches/0002-CVE-2022-26307-make-hash-encoding-match-decoding.patch b/debian/patches/0002-CVE-2022-26307-make-hash-encoding-match-decoding.patch new file mode 100644 index 00000000000..d56b5ea04d6 --- /dev/null +++ b/debian/patches/0002-CVE-2022-26307-make-hash-encoding-match-decoding.patch @@ -0,0 +1,183 @@ +From 780c42cdd8006dc60e281be2fe6566f101e909bc Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Mon, 21 Mar 2022 20:58:34 +0000 +Subject: [PATCH 2/4] CVE-2022-26307 make hash encoding match decoding + +Seeing as old versions of the hash may be in the users config, add a +StorageVersion field to the office config Passwords section which +defaults to 0 to indicate the old hash is in use. + +Try the old varient when StorageVersion is 0. When a new encoded master +password it set write StorageVersion of 1 to indicate a new hash is in +use and use the new style when StorageVersion is 1. + +Change-Id: I3174c37a5891bfc849984e0ec5c2c392b9c6e7b1 +Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132080 +Tested-by: Jenkins +Reviewed-by: Stephan Bergmann +(cherry picked from commit e890f54dbac57f3ab5acf4fbd31222095d3e8ab6) +--- + .../schema/org/openoffice/Office/Common.xcs | 6 +++ + .../passwordcontainer/passwordcontainer.cxx | 45 +++++++++++++++++-- + .../passwordcontainer/passwordcontainer.hxx | 6 +++ + uui/source/iahndl-authentication.cxx | 5 ++- + 4 files changed, 57 insertions(+), 5 deletions(-) + +diff --git a/officecfg/registry/schema/org/openoffice/Office/Common.xcs b/officecfg/registry/schema/org/openoffice/Office/Common.xcs +index 9097c23c3c6a..922efc33cca7 100644 +--- a/officecfg/registry/schema/org/openoffice/Office/Common.xcs ++++ b/officecfg/registry/schema/org/openoffice/Office/Common.xcs +@@ -942,6 +942,12 @@ + + false + ++ ++ ++ Specifies what version of encoding scheme the password container uses. ++ ++ 0 ++ + + + Specifies if there is a valid master password. +diff --git a/svl/source/passwordcontainer/passwordcontainer.cxx b/svl/source/passwordcontainer/passwordcontainer.cxx +index 51fb129cddb1..b674844f91d3 100644 +--- a/svl/source/passwordcontainer/passwordcontainer.cxx ++++ b/svl/source/passwordcontainer/passwordcontainer.cxx +@@ -17,7 +17,6 @@ + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +- + #include "passwordcontainer.hxx" + + #include +@@ -259,6 +258,23 @@ bool StorageItem::useStorage() + return aResult; + } + ++sal_Int32 StorageItem::getStorageVersion() ++{ ++ Sequence aNodeNames { "StorageVersion" }; ++ ++ Sequence< Any > aPropertyValues = ConfigItem::GetProperties( aNodeNames ); ++ ++ if( aPropertyValues.getLength() != aNodeNames.getLength() ) ++ { ++ OSL_FAIL( "Problems during reading" ); ++ return 0; ++ } ++ ++ sal_Int32 nResult = 0; ++ aPropertyValues[0] >>= nResult; ++ ++ return nResult; ++} + + bool StorageItem::getEncodedMP( OUString& aResult ) + { +@@ -291,15 +307,17 @@ bool StorageItem::getEncodedMP( OUString& aResult ) + + void StorageItem::setEncodedMP( const OUString& aEncoded, bool bAcceptEmpty ) + { +- Sequence< OUString > sendNames(2); +- Sequence< uno::Any > sendVals(2); ++ Sequence< OUString > sendNames(3); ++ Sequence< uno::Any > sendVals(3); + + sendNames[0] = "HasMaster"; + sendNames[1] = "Master"; ++ sendNames[2] = "StorageVersion"; + + bool bHasMaster = ( !aEncoded.isEmpty() || bAcceptEmpty ); + sendVals[0] <<= bHasMaster; + sendVals[1] <<= aEncoded; ++ sendVals[2] <<= nCurrentStorageVersion; + + ConfigItem::SetModified(); + ConfigItem::PutProperties( sendNames, sendVals ); +@@ -800,6 +818,18 @@ OUString PasswordContainer::RequestPasswordFromUser( PasswordRequestMode aRMode, + return aResult; + } + ++// Mangle the key to match an old bug ++static OUString ReencodeAsOldHash(const OUString& rPass) ++{ ++ OUStringBuffer aBuffer; ++ for (int ind = 0; ind < RTL_DIGEST_LENGTH_MD5; ++ind) ++ { ++ unsigned char i = static_cast(rPass.copy(ind * 2, 2).toUInt32(16)); ++ aBuffer.append(static_cast< sal_Unicode >('a' + (i >> 4))); ++ aBuffer.append(static_cast< sal_Unicode >('a' + (i & 15))); ++ } ++ return aBuffer.makeStringAndClear(); ++} + + OUString const & PasswordContainer::GetMasterPassword( const Reference< XInteractionHandler >& aHandler ) + { +@@ -838,6 +868,9 @@ OUString const & PasswordContainer::GetMasterPassword( const Reference< XInterac + } + else + { ++ if (m_pStorageFile->getStorageVersion() == 0) ++ aPass = ReencodeAsOldHash(aPass); ++ + std::vector< OUString > aRM( DecodePasswords( aEncodedMP, aPass, aRMode ) ); + if( aRM.empty() || aPass != aRM[0] ) + { +@@ -1042,6 +1075,12 @@ sal_Bool SAL_CALL PasswordContainer::authorizateWithMasterPassword( const uno::R + + do { + aPass = RequestPasswordFromUser( aRMode, xTmpHandler ); ++ ++ if (!aPass.isEmpty() && m_pStorageFile->getStorageVersion() == 0) ++ { ++ aPass = ReencodeAsOldHash(aPass); ++ } ++ + bResult = ( !aPass.isEmpty() && aPass == m_aMasterPasswd ); + aRMode = PasswordRequestMode_PASSWORD_REENTER; // further questions with error notification + } while( !bResult && !aPass.isEmpty() ); +diff --git a/svl/source/passwordcontainer/passwordcontainer.hxx b/svl/source/passwordcontainer/passwordcontainer.hxx +index 46ffec888602..bf43b5903602 100644 +--- a/svl/source/passwordcontainer/passwordcontainer.hxx ++++ b/svl/source/passwordcontainer/passwordcontainer.hxx +@@ -168,6 +168,10 @@ public: + typedef ::std::pair< const OUString, ::std::vector< NamePassRecord > > PairUrlRecord; + typedef ::std::map< OUString, ::std::vector< NamePassRecord > > PassMap; + ++// org.openoffice.Office.Common/Passwords/StorageVersion bump if details of ++// how password details are saved changes. Enables migration from previous ++// schemes. ++constexpr sal_Int32 nCurrentStorageVersion = 1; + + class PasswordContainer; + +@@ -195,6 +195,8 @@ + void remove( const OUString& url, const OUString& rec ); + void clear(); + ++ sal_Int32 getStorageVersion(); ++ + bool getEncodedMP( OUString& aResult ); + void setEncodedMP( const OUString& aResult, bool bAcceptEnmpty = false ); + void setUseStorage( bool bUse ); +diff --git a/uui/source/iahndl-authentication.cxx b/uui/source/iahndl-authentication.cxx +index ad975d3f9ae7..951f0b8a1c6b 100644 +--- a/uui/source/iahndl-authentication.cxx ++++ b/uui/source/iahndl-authentication.cxx +@@ -436,8 +436,9 @@ executeMasterPasswordDialog( + OUStringBuffer aBuffer; + for (sal_uInt8 i : aKey) + { +- aBuffer.append(static_cast< sal_Unicode >('a' + (i >> 4))); +- aBuffer.append(static_cast< sal_Unicode >('a' + (i & 15))); ++ // match PasswordContainer::DecodePasswords aMasterPasswd.copy(index * 2, 2).toUInt32(16)); ++ aBuffer.append(OUString::number(i >> 4, 16)); ++ aBuffer.append(OUString::number(i & 15, 16)); + } + rInfo.SetPassword(aBuffer.makeStringAndClear()); + } +-- +2.37.1 + diff --git a/debian/patches/0003-CVE-2022-26306-add-Initialization-Vectors-to-passwor.patch b/debian/patches/0003-CVE-2022-26306-add-Initialization-Vectors-to-passwor.patch new file mode 100644 index 00000000000..b65b3530cf4 --- /dev/null +++ b/debian/patches/0003-CVE-2022-26306-add-Initialization-Vectors-to-passwor.patch @@ -0,0 +1,583 @@ +From e809625c2ca9f0c026aab9b5c2d13ced628c13e9 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Tue, 22 Mar 2022 17:22:22 +0000 +Subject: [PATCH 3/4] CVE-2022-26306 add Initialization Vectors to password + storage + +old ones default to the current all zero case and continue to work +as before + +Change-Id: I6fe3b02fafcce1b5e7133e77e76a5118177d77af +Reviewed-on: https://gerrit.libreoffice.org/c/core/+/131974 +Tested-by: Jenkins +Reviewed-by: Michael Stahl +(cherry picked from commit 192fa1e3bfc6269f2ebb91716471485a56074aea) +Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132306 +Reviewed-by: Thorsten Behrens +(cherry picked from commit ab77587ec300f5c30084471000663c46ddf25dad) +--- + .../schema/org/openoffice/Office/Common.xcs | 10 ++ + .../passwordcontainer/passwordcontainer.cxx | 127 ++++++++++++------ + .../passwordcontainer/passwordcontainer.hxx | 63 +++++++-- + 3 files changed, 151 insertions(+), 49 deletions(-) + +diff --git a/officecfg/registry/schema/org/openoffice/Office/Common.xcs b/officecfg/registry/schema/org/openoffice/Office/Common.xcs +index 922efc33cca7..8d87d00d5369 100644 +--- a/officecfg/registry/schema/org/openoffice/Office/Common.xcs ++++ b/officecfg/registry/schema/org/openoffice/Office/Common.xcs +@@ -27,6 +27,11 @@ + + Contains a container for passwords. + ++ ++ ++ Contains an initialization vector for the password encryption. ++ ++ + + + Contains a password encoded with the master password. +@@ -954,6 +959,11 @@ + + false + ++ ++ ++ Contains an initialization vector for the master password encryption. ++ ++ + + + Contains the master password encrypted by itself. +diff --git a/svl/source/passwordcontainer/passwordcontainer.cxx b/svl/source/passwordcontainer/passwordcontainer.cxx +index b674844f91d3..ef79470a2cb6 100644 +--- a/svl/source/passwordcontainer/passwordcontainer.cxx ++++ b/svl/source/passwordcontainer/passwordcontainer.cxx +@@ -181,15 +181,18 @@ PassMap StorageItem::getInfo() + + Sequence< OUString > aNodeNames = ConfigItem::GetNodeNames( "Store" ); + sal_Int32 aNodeCount = aNodeNames.getLength(); +- Sequence< OUString > aPropNames( aNodeCount ); ++ Sequence< OUString > aPropNames( aNodeCount * 2); + + std::transform(aNodeNames.begin(), aNodeNames.end(), aPropNames.begin(), + [](const OUString& rName) -> OUString { + return "Store/Passwordstorage['" + rName + "']/Password"; }); ++ std::transform(aNodeNames.begin(), aNodeNames.end(), aPropNames.getArray() + aNodeCount, ++ [](const OUString& rName) -> OUString { ++ return "Store/Passwordstorage['" + rName + "']/InitializationVector"; }); + + Sequence< Any > aPropertyValues = ConfigItem::GetProperties( aPropNames ); + +- if( aPropertyValues.getLength() != aNodeCount ) ++ if( aPropertyValues.getLength() != aNodeCount * 2) + { + OSL_FAIL( "Problems during reading" ); + return aResult; +@@ -205,14 +208,16 @@ PassMap StorageItem::getInfo() + OUString aName = aUrlUsr[1]; + + OUString aEPasswd; ++ OUString aIV; + aPropertyValues[aNodeInd] >>= aEPasswd; ++ aPropertyValues[aNodeInd + aNodeCount] >>= aIV; + + PassMap::iterator aIter = aResult.find( aUrl ); + if( aIter != aResult.end() ) +- aIter->second.emplace_back( aName, aEPasswd ); ++ aIter->second.emplace_back( aName, aEPasswd, aIV ); + else + { +- NamePassRecord aNewRecord( aName, aEPasswd ); ++ NamePassRecord aNewRecord( aName, aEPasswd, aIV ); + std::vector< NamePassRecord > listToAdd( 1, aNewRecord ); + + aResult.insert( PairUrlRecord( aUrl, listToAdd ) ); +@@ -276,17 +281,19 @@ sal_Int32 StorageItem::getStorageVersion() + return nResult; + } + +-bool StorageItem::getEncodedMP( OUString& aResult ) ++bool StorageItem::getEncodedMP( OUString& aResult, OUString& aResultIV ) + { + if( hasEncoded ) + { + aResult = mEncoded; ++ aResultIV = mEncodedIV; + return true; + } + +- Sequence< OUString > aNodeNames( 2 ); ++ Sequence< OUString > aNodeNames( 3 ); + aNodeNames[0] = "HasMaster"; + aNodeNames[1] = "Master"; ++ aNodeNames[2] = "MasterInitializationVector"; + + Sequence< Any > aPropertyValues = ConfigItem::GetProperties( aNodeNames ); + +@@ -298,32 +305,37 @@ bool StorageItem::getEncodedMP( OUString& aResult ) + + aPropertyValues[0] >>= hasEncoded; + aPropertyValues[1] >>= mEncoded; ++ aPropertyValues[2] >>= mEncodedIV; + + aResult = mEncoded; ++ aResultIV = mEncodedIV; + + return hasEncoded; + } + + +-void StorageItem::setEncodedMP( const OUString& aEncoded, bool bAcceptEmpty ) ++void StorageItem::setEncodedMP( const OUString& aEncoded, const OUString& aEncodedIV, bool bAcceptEmpty ) + { +- Sequence< OUString > sendNames(3); +- Sequence< uno::Any > sendVals(3); ++ Sequence< OUString > sendNames(4); ++ Sequence< uno::Any > sendVals(4); + + sendNames[0] = "HasMaster"; + sendNames[1] = "Master"; +- sendNames[2] = "StorageVersion"; ++ sendNames[2] = "MasterInitializationVector"; ++ sendNames[3] = "StorageVersion"; + + bool bHasMaster = ( !aEncoded.isEmpty() || bAcceptEmpty ); + sendVals[0] <<= bHasMaster; + sendVals[1] <<= aEncoded; +- sendVals[2] <<= nCurrentStorageVersion; ++ sendVals[2] <<= aEncodedIV; ++ sendVals[3] <<= nCurrentStorageVersion; + + ConfigItem::SetModified(); + ConfigItem::PutProperties( sendNames, sendVals ); + + hasEncoded = bHasMaster; + mEncoded = aEncoded; ++ mEncodedIV = aEncodedIV; + } + + +@@ -359,11 +371,13 @@ void StorageItem::update( const OUString& aURL, const NamePassRecord& aRecord ) + forIndex.push_back( aURL ); + forIndex.push_back( aRecord.GetUserName() ); + +- Sequence< beans::PropertyValue > sendSeq(1); ++ Sequence< beans::PropertyValue > sendSeq(2); + +- sendSeq[0].Name = "Store/Passwordstorage['" + createIndex( forIndex ) + "']/Password"; ++ sendSeq[0].Name = "Store/Passwordstorage['" + createIndex( forIndex ) + "']/InitializationVector"; ++ sendSeq[0].Value <<= aRecord.GetPersistentIV(); + +- sendSeq[0].Value <<= aRecord.GetPersPasswords(); ++ sendSeq[1].Name = "Store/Passwordstorage['" + createIndex( forIndex ) + "']/Password"; ++ sendSeq[1].Value <<= aRecord.GetPersPasswords(); + + ConfigItem::SetModified(); + ConfigItem::SetSetProperties( "Store", sendSeq ); +@@ -424,7 +438,7 @@ void SAL_CALL PasswordContainer::disposing( const EventObject& ) + } + } + +-std::vector< OUString > PasswordContainer::DecodePasswords( const OUString& aLine, const OUString& aMasterPasswd, css::task::PasswordRequestMode mode ) ++std::vector< OUString > PasswordContainer::DecodePasswords( const OUString& aLine, const OUString& aIV, const OUString& aMasterPasswd, css::task::PasswordRequestMode mode ) + { + if( !aMasterPasswd.isEmpty() ) + { +@@ -439,9 +453,16 @@ std::vector< OUString > PasswordContainer::DecodePasswords( const OUString& aLin + for( int ind = 0; ind < RTL_DIGEST_LENGTH_MD5; ind++ ) + code[ ind ] = static_cast(aMasterPasswd.copy( ind*2, 2 ).toUInt32(16)); + ++ unsigned char iv[RTL_DIGEST_LENGTH_MD5] = {0}; ++ if (!aIV.isEmpty()) ++ { ++ for( int ind = 0; ind < RTL_DIGEST_LENGTH_MD5; ind++ ) ++ iv[ ind ] = static_cast(aIV.copy( ind*2, 2 ).toUInt32(16)); ++ } ++ + rtlCipherError result = rtl_cipher_init ( + aDecoder, rtl_Cipher_DirectionDecode, +- code, RTL_DIGEST_LENGTH_MD5, nullptr, 0 ); ++ code, RTL_DIGEST_LENGTH_MD5, iv, RTL_DIGEST_LENGTH_MD5 ); + + if( result == rtl_Cipher_E_None ) + { +@@ -474,7 +495,7 @@ std::vector< OUString > PasswordContainer::DecodePasswords( const OUString& aLin + "Can't decode!", css::uno::Reference(), mode); + } + +-OUString PasswordContainer::EncodePasswords(const std::vector< OUString >& lines, const OUString& aMasterPasswd ) ++OUString PasswordContainer::EncodePasswords(const std::vector< OUString >& lines, const OUString& aIV, const OUString& aMasterPasswd) + { + if( !aMasterPasswd.isEmpty() ) + { +@@ -491,9 +512,16 @@ OUString PasswordContainer::EncodePasswords(const std::vector< OUString >& lines + for( int ind = 0; ind < RTL_DIGEST_LENGTH_MD5; ind++ ) + code[ ind ] = static_cast(aMasterPasswd.copy( ind*2, 2 ).toUInt32(16)); + ++ unsigned char iv[RTL_DIGEST_LENGTH_MD5] = {0}; ++ if (!aIV.isEmpty()) ++ { ++ for( int ind = 0; ind < RTL_DIGEST_LENGTH_MD5; ind++ ) ++ iv[ ind ] = static_cast(aIV.copy( ind*2, 2 ).toUInt32(16)); ++ } ++ + rtlCipherError result = rtl_cipher_init ( + aEncoder, rtl_Cipher_DirectionEncode, +- code, RTL_DIGEST_LENGTH_MD5, nullptr, 0 ); ++ code, RTL_DIGEST_LENGTH_MD5, iv, RTL_DIGEST_LENGTH_MD5 ); + + if( result == rtl_Cipher_E_None ) + { +@@ -561,7 +589,7 @@ void PasswordContainer::UpdateVector( const OUString& aURL, std::vector< NamePas + + if( aRecord.HasPasswords( PERSISTENT_RECORD ) ) + { +- aNPIter.SetPersPasswords( aRecord.GetPersPasswords() ); ++ aNPIter.SetPersPasswords( aRecord.GetPersPasswords(), aRecord.GetPersistentIV() ); + + if( writeFile ) + { +@@ -594,7 +622,8 @@ UserRecord PasswordContainer::CopyToUserRecord( const NamePassRecord& aRecord, b + { + try + { +- ::std::vector< OUString > aDecodedPasswords = DecodePasswords( aRecord.GetPersPasswords(), GetMasterPassword( aHandler ), css::task::PasswordRequestMode_PASSWORD_ENTER ); ++ ::std::vector< OUString > aDecodedPasswords = DecodePasswords( aRecord.GetPersPasswords(), aRecord.GetPersistentIV(), ++ GetMasterPassword( aHandler ), css::task::PasswordRequestMode_PASSWORD_ENTER ); + aPasswords.insert( aPasswords.end(), aDecodedPasswords.begin(), aDecodedPasswords.end() ); + } + catch( NoMasterException& ) +@@ -639,6 +668,19 @@ void SAL_CALL PasswordContainer::addPersistent( const OUString& Url, const OUStr + PrivateAdd( Url, UserName, Passwords, PERSISTENT_RECORD, aHandler ); + } + ++OUString PasswordContainer::createIV() ++{ ++ rtlRandomPool randomPool = mRandomPool.get(); ++ unsigned char iv[RTL_DIGEST_LENGTH_MD5]; ++ rtl_random_getBytes(randomPool, iv, RTL_DIGEST_LENGTH_MD5); ++ OUStringBuffer aBuffer; ++ for (sal_uInt8 i : iv) ++ { ++ aBuffer.append(OUString::number(i >> 4, 16)); ++ aBuffer.append(OUString::number(i & 15, 16)); ++ } ++ return aBuffer.makeStringAndClear(); ++} + + void PasswordContainer::PrivateAdd( const OUString& Url, const OUString& UserName, const Sequence< OUString >& Passwords, char Mode, const Reference< XInteractionHandler >& aHandler ) + { +@@ -646,7 +688,11 @@ void PasswordContainer::PrivateAdd( const OUString& Url, const OUString& UserNam + ::std::vector< OUString > aStorePass = comphelper::sequenceToContainer< std::vector >( Passwords ); + + if( Mode == PERSISTENT_RECORD ) +- aRecord.SetPersPasswords( EncodePasswords( aStorePass, GetMasterPassword( aHandler ) ) ); ++ { ++ OUString sIV = createIV(); ++ OUString sEncodedPasswords = EncodePasswords( aStorePass, sIV, GetMasterPassword( aHandler ) ); ++ aRecord.SetPersPasswords( sEncodedPasswords, sIV ); ++ } + else if( Mode == MEMORY_RECORD ) + aRecord.SetMemPasswords( aStorePass ); + else +@@ -839,10 +885,10 @@ OUString const & PasswordContainer::GetMasterPassword( const Reference< XInterac + + if( m_aMasterPasswd.isEmpty() && aHandler.is() ) + { +- OUString aEncodedMP; ++ OUString aEncodedMP, aEncodedMPIV; + bool bDefaultPassword = false; + +- if( !m_pStorageFile->getEncodedMP( aEncodedMP ) ) ++ if( !m_pStorageFile->getEncodedMP( aEncodedMP, aEncodedMPIV ) ) + aRMode = PasswordRequestMode_PASSWORD_CREATE; + else if ( aEncodedMP.isEmpty() ) + { +@@ -864,14 +910,15 @@ OUString const & PasswordContainer::GetMasterPassword( const Reference< XInterac + m_aMasterPasswd = aPass; + std::vector< OUString > aMaster( 1, m_aMasterPasswd ); + +- m_pStorageFile->setEncodedMP( EncodePasswords( aMaster, m_aMasterPasswd ) ); ++ OUString sIV = createIV(); ++ m_pStorageFile->setEncodedMP( EncodePasswords( aMaster, sIV, m_aMasterPasswd ), sIV ); + } + else + { + if (m_pStorageFile->getStorageVersion() == 0) + aPass = ReencodeAsOldHash(aPass); + +- std::vector< OUString > aRM( DecodePasswords( aEncodedMP, aPass, aRMode ) ); ++ std::vector< OUString > aRM( DecodePasswords( aEncodedMP, aEncodedMPIV, aPass, aRMode ) ); + if( aRM.empty() || aPass != aRM[0] ) + { + bAskAgain = true; +@@ -1028,7 +1075,8 @@ Sequence< UrlRecord > SAL_CALL PasswordContainer::getAllPersistent( const Refere + { + sal_Int32 oldLen = aUsers.getLength(); + aUsers.realloc( oldLen + 1 ); +- aUsers[ oldLen ] = UserRecord( aNP.GetUserName(), comphelper::containerToSequence( DecodePasswords( aNP.GetPersPasswords(), GetMasterPassword( xHandler ), css::task::PasswordRequestMode_PASSWORD_ENTER ) ) ); ++ aUsers[ oldLen ] = UserRecord( aNP.GetUserName(), comphelper::containerToSequence( DecodePasswords( aNP.GetPersPasswords(), aNP.GetPersistentIV(), ++ GetMasterPassword( xHandler ), css::task::PasswordRequestMode_PASSWORD_ENTER ) ) ); + } + + if( aUsers.hasElements() ) +@@ -1045,12 +1093,12 @@ Sequence< UrlRecord > SAL_CALL PasswordContainer::getAllPersistent( const Refere + sal_Bool SAL_CALL PasswordContainer::authorizateWithMasterPassword( const uno::Reference< task::XInteractionHandler >& xHandler ) + { + bool bResult = false; +- OUString aEncodedMP; ++ OUString aEncodedMP, aEncodedMPIV; + uno::Reference< task::XInteractionHandler > xTmpHandler = xHandler; + ::osl::MutexGuard aGuard( mMutex ); + + // the method should fail if there is no master password +- if( m_pStorageFile && m_pStorageFile->useStorage() && m_pStorageFile->getEncodedMP( aEncodedMP ) ) ++ if( m_pStorageFile && m_pStorageFile->useStorage() && m_pStorageFile->getEncodedMP( aEncodedMP, aEncodedMPIV ) ) + { + if ( aEncodedMP.isEmpty() ) + { +@@ -1118,8 +1166,8 @@ sal_Bool SAL_CALL PasswordContainer::changeMasterPassword( const uno::Reference< + + bool bCanChangePassword = true; + // if there is already a stored master password it should be entered by the user before the change happen +- OUString aEncodedMP; +- if( !m_aMasterPasswd.isEmpty() || m_pStorageFile->getEncodedMP( aEncodedMP ) ) ++ OUString aEncodedMP, aEncodedMPIV; ++ if( !m_aMasterPasswd.isEmpty() || m_pStorageFile->getEncodedMP( aEncodedMP, aEncodedMPIV ) ) + bCanChangePassword = authorizateWithMasterPassword( xTmpHandler ); + + if ( bCanChangePassword ) +@@ -1138,7 +1186,8 @@ sal_Bool SAL_CALL PasswordContainer::changeMasterPassword( const uno::Reference< + // store the new master password + m_aMasterPasswd = aPass; + std::vector< OUString > aMaster( 1, m_aMasterPasswd ); +- m_pStorageFile->setEncodedMP( EncodePasswords( aMaster, m_aMasterPasswd ) ); ++ OUString aIV = createIV(); ++ m_pStorageFile->setEncodedMP( EncodePasswords( aMaster, aIV, m_aMasterPasswd ), aIV ); + + // store all the entries with the new password + for ( const auto& rURL : aPersistent ) +@@ -1163,7 +1212,7 @@ void SAL_CALL PasswordContainer::removeMasterPassword() + if ( m_pStorageFile ) + { + m_aMasterPasswd.clear(); +- m_pStorageFile->setEncodedMP( OUString() ); // let the master password be removed from configuration ++ m_pStorageFile->setEncodedMP( OUString(), OUString() ); // let the master password be removed from configuration + } + } + +@@ -1174,8 +1223,8 @@ sal_Bool SAL_CALL PasswordContainer::hasMasterPassword( ) + if ( !m_pStorageFile ) + throw uno::RuntimeException(); + +- OUString aEncodedMP; +- return ( m_pStorageFile->useStorage() && m_pStorageFile->getEncodedMP( aEncodedMP ) ); ++ OUString aEncodedMP, aEncodedMPIV; ++ return ( m_pStorageFile->useStorage() && m_pStorageFile->getEncodedMP( aEncodedMP, aEncodedMPIV ) ); + } + + sal_Bool SAL_CALL PasswordContainer::allowPersistentStoring( sal_Bool bAllow ) +@@ -1222,8 +1271,8 @@ sal_Bool SAL_CALL PasswordContainer::useDefaultMasterPassword( const uno::Refere + + bool bCanChangePassword = true; + // if there is already a stored nondefault master password it should be entered by the user before the change happen +- OUString aEncodedMP; +- if( m_pStorageFile->getEncodedMP( aEncodedMP ) && !aEncodedMP.isEmpty() ) ++ OUString aEncodedMP, aEncodedMPIV; ++ if( m_pStorageFile->getEncodedMP( aEncodedMP, aEncodedMPIV ) && !aEncodedMP.isEmpty() ) + bCanChangePassword = authorizateWithMasterPassword( xTmpHandler ); + + if ( bCanChangePassword ) +@@ -1240,7 +1289,7 @@ sal_Bool SAL_CALL PasswordContainer::useDefaultMasterPassword( const uno::Refere + + // store the empty string to flag the default master password + m_aMasterPasswd = aPass; +- m_pStorageFile->setEncodedMP( OUString(), true ); ++ m_pStorageFile->setEncodedMP( OUString(), OUString(), true ); + + // store all the entries with the new password + for ( const auto& rURL : aPersistent ) +@@ -1264,8 +1313,8 @@ sal_Bool SAL_CALL PasswordContainer::isDefaultMasterPasswordUsed() + if ( !m_pStorageFile ) + throw uno::RuntimeException(); + +- OUString aEncodedMP; +- return ( m_pStorageFile->useStorage() && m_pStorageFile->getEncodedMP( aEncodedMP ) && aEncodedMP.isEmpty() ); ++ OUString aEncodedMP, aEncodedMPIV; ++ return ( m_pStorageFile->useStorage() && m_pStorageFile->getEncodedMP( aEncodedMP, aEncodedMPIV ) && aEncodedMP.isEmpty() ); + } + + +diff --git a/svl/source/passwordcontainer/passwordcontainer.hxx b/svl/source/passwordcontainer/passwordcontainer.hxx +index bf43b5903602..0454437b9dc2 100644 +--- a/svl/source/passwordcontainer/passwordcontainer.hxx ++++ b/svl/source/passwordcontainer/passwordcontainer.hxx +@@ -34,6 +34,7 @@ + #include + #include + ++#include + #include + #include + +@@ -52,11 +53,12 @@ class NamePassRecord + ::std::vector< OUString > m_aMemPass; + + // persistent passwords are encrypted in one string +- bool m_bHasPersPass; ++ bool m_bHasPersPass; + OUString m_aPersPass; ++ OUString m_aPersistentIV; + + void InitArrays( bool bHasMemoryList, const ::std::vector< OUString >& aMemoryList, +- bool bHasPersistentList, const OUString& aPersistentList ) ++ bool bHasPersistentList, const OUString& aPersistentList, const OUString& aPersistentIV ) + { + m_bHasMemPass = bHasMemoryList; + if ( bHasMemoryList ) +@@ -64,7 +66,10 @@ class NamePassRecord + + m_bHasPersPass = bHasPersistentList; + if ( bHasPersistentList ) ++ { + m_aPersPass = aPersistentList; ++ m_aPersistentIV = aPersistentIV; ++ } + } + + public: +@@ -76,11 +81,12 @@ public: + { + } + +- NamePassRecord( const OUString& aName, const OUString& aPersistentList ) ++ NamePassRecord( const OUString& aName, const OUString& aPersistentList, const OUString& aPersistentIV ) + : m_aName( aName ) + , m_bHasMemPass( false ) + , m_bHasPersPass( true ) + , m_aPersPass( aPersistentList ) ++ , m_aPersistentIV( aPersistentIV ) + { + } + +@@ -89,7 +95,8 @@ public: + , m_bHasMemPass( false ) + , m_bHasPersPass( false ) + { +- InitArrays( aRecord.m_bHasMemPass, aRecord.m_aMemPass, aRecord.m_bHasPersPass, aRecord.m_aPersPass ); ++ InitArrays( aRecord.m_bHasMemPass, aRecord.m_aMemPass, ++ aRecord.m_bHasPersPass, aRecord.m_aPersPass, aRecord.m_aPersistentIV ); + } + + NamePassRecord& operator=( const NamePassRecord& aRecord ) +@@ -100,7 +107,9 @@ public: + + m_aMemPass.clear(); + m_aPersPass.clear(); +- InitArrays( aRecord.m_bHasMemPass, aRecord.m_aMemPass, aRecord.m_bHasPersPass, aRecord.m_aPersPass ); ++ m_aPersistentIV.clear(); ++ InitArrays( aRecord.m_bHasMemPass, aRecord.m_aMemPass, ++ aRecord.m_bHasPersPass, aRecord.m_aPersPass, aRecord.m_aPersistentIV ); + } + return *this; + } +@@ -136,15 +145,24 @@ public: + return OUString(); + } + ++ OUString GetPersistentIV() const ++ { ++ if ( m_bHasPersPass ) ++ return m_aPersistentIV; ++ ++ return OUString(); ++ } ++ + void SetMemPasswords( const ::std::vector< OUString >& aMemList ) + { + m_aMemPass = aMemList; + m_bHasMemPass = true; + } + +- void SetPersPasswords( const OUString& aPersList ) ++ void SetPersPasswords( const OUString& aPersList, const OUString& aPersIV ) + { + m_aPersPass = aPersList; ++ m_aPersistentIV = aPersIV; + m_bHasPersPass = true; + } + +@@ -159,6 +177,7 @@ public: + { + m_bHasPersPass = false; + m_aPersPass.clear(); ++ m_aPersistentIV.clear(); + } + } + +@@ -182,6 +201,7 @@ private: + PasswordContainer* mainCont; + bool hasEncoded; + OUString mEncoded; ++ OUString mEncodedIV; + + virtual void ImplCommit() override; + +@@ -201,8 +201,8 @@ + + sal_Int32 getStorageVersion(); + +- bool getEncodedMP( OUString& aResult ); +- void setEncodedMP( const OUString& aResult, bool bAcceptEnmpty = false ); ++ bool getEncodedMP( OUString& aResult, OUString& aResultIV ); ++ void setEncodedMP( const OUString& aResult, const OUString& aResultIV, bool bAcceptEmpty = false ); + void setUseStorage( bool bUse ); + bool useStorage(); + +@@ -224,6 +244,29 @@ private: + css::uno::Reference< css::lang::XComponent > mComponent; + SysCredentialsConfig mUrlContainer; + ++ class RandomPool ++ { ++ private: ++ rtlRandomPool m_aRandomPool; ++ public: ++ RandomPool() : m_aRandomPool(rtl_random_createPool()) ++ { ++ } ++ rtlRandomPool get() ++ { ++ return m_aRandomPool; ++ } ++ ~RandomPool() ++ { ++ // Clean up random pool memory ++ rtl_random_destroyPool(m_aRandomPool); ++ } ++ }; ++ ++ RandomPool mRandomPool; ++ ++ OUString createIV(); ++ + /// @throws css::uno::RuntimeException + css::uno::Sequence< css::task::UserRecord > CopyToUserRecordSequence( + const ::std::vector< NamePassRecord >& original, +@@ -274,10 +317,10 @@ css::task::UrlRecord find( + const css::uno::Reference< css::task::XInteractionHandler >& Handler ); + + /// @throws css::uno::RuntimeException +- static ::std::vector< OUString > DecodePasswords( const OUString& aLine, const OUString& aMasterPassword, css::task::PasswordRequestMode mode ); ++ static ::std::vector< OUString > DecodePasswords( const OUString& aLine, const OUString& aIV, const OUString& aMasterPassword, css::task::PasswordRequestMode mode ); + + /// @throws css::uno::RuntimeException +- static OUString EncodePasswords(const std::vector< OUString >& lines, const OUString& aMasterPassword ); ++ static OUString EncodePasswords(const std::vector< OUString >& lines, const OUString& aIV, const OUString& aMasterPassword ); + + public: + PasswordContainer( const css::uno::Reference< css::lang::XMultiServiceFactory >& ); +-- +2.37.1 + diff --git a/debian/patches/0004-CVE-2022-2630-6-7-add-infobar-to-prompt-to-refresh-t.patch b/debian/patches/0004-CVE-2022-2630-6-7-add-infobar-to-prompt-to-refresh-t.patch new file mode 100644 index 00000000000..fd02eb7bb6e --- /dev/null +++ b/debian/patches/0004-CVE-2022-2630-6-7-add-infobar-to-prompt-to-refresh-t.patch @@ -0,0 +1,117 @@ +From 4cfd591942e4cfd3efc416bfac8e46e3580d37ba Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Wed, 23 Mar 2022 13:03:30 +0000 +Subject: add infobar to prompt to refresh to replace old format + +Reviewed-on: https://gerrit.libreoffice.org/c/core/+/131976 +Tested-by: Jenkins +Reviewed-by: Michael Stahl +(cherry picked from commit bbd196ff82bda9f66b4ba32a412f10cefe6da60e) +Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132307 +Reviewed-by: Sophie Gautier +Reviewed-by: Christian Lohmaier +(cherry picked from commit c5d01b11db3c83cb4a89d3b388d78e20dd3990b5) + +Change-Id: Id99cbf2b50a4ebf289dae6fc67e22e20afcda35b +Reviewed-on: https://gerrit.libreoffice.org/c/core/+/133906 +Tested-by: Michael Stahl +Reviewed-by: Michael Stahl +--- + include/sfx2/strings.hrc | 2 ++ + include/sfx2/viewfrm.hxx | 1 + + sfx2/source/view/viewfrm.cxx | 40 ++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 43 insertions(+) + +diff --git a/include/sfx2/strings.hrc b/include/sfx2/strings.hrc +index 1f21f0a0f186..1db36e733c0c 100644 +--- a/include/sfx2/strings.hrc ++++ b/include/sfx2/strings.hrc +@@ -297,6 +297,8 @@ + #define STR_SIGNATURE_NOTVALIDATED_PARTIAL_OK NC_("STR_SIGNATURE_NOTVALIDATED_PARTIAL_OK", "The certificate could not be validated and the document is only partially signed.") + #define STR_SIGNATURE_OK NC_("STR_SIGNATURE_OK", "This document is digitally signed and the signature is valid.") + #define STR_SIGNATURE_SHOW NC_("STR_SIGNATURE_SHOW", "Show Signatures") ++#define STR_REFRESH_MASTER_PASSWORD NC_("STR_REFRESH_MASTER_PASSWORD", "The master password is stored in an outdated format, you should refresh it") ++#define STR_REFRESH_PASSWORD NC_("STR_REFRESH_PASSWORD", "Refresh Password") + + #define STR_CLOSE_PANE NC_("STR_CLOSE_PANE", "Close Pane") + #define STR_SFX_DOCK NC_("STR_SFX_DOCK", "Dock") +diff --git a/include/sfx2/viewfrm.hxx b/include/sfx2/viewfrm.hxx +index fe336ba5f091..cc6a7dae7047 100644 +--- a/include/sfx2/viewfrm.hxx ++++ b/include/sfx2/viewfrm.hxx +@@ -61,6 +61,7 @@ protected: + DECL_LINK(WhatsNewHandler, Button*, void); + DECL_LINK(SwitchReadOnlyHandler, Button*, void); + DECL_LINK(SignDocumentHandler, Button*, void); ++ DECL_DLLPRIVATE_LINK(RefreshMasterPasswordHdl, Button*, void); + SAL_DLLPRIVATE void KillDispatcher_Impl(); + + virtual ~SfxViewFrame() override; +diff --git a/sfx2/source/view/viewfrm.cxx b/sfx2/source/view/viewfrm.cxx +index 5a64599e5894..86e7d51bbfea 100644 +--- a/sfx2/source/view/viewfrm.cxx ++++ b/sfx2/source/view/viewfrm.cxx +@@ -32,6 +32,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -1390,6 +1391,24 @@ void SfxViewFrame::Notify( SfxBroadcaster& /*rBC*/, const SfxHint& rHint ) + batch->commit(); + } + ++ if (officecfg::Office::Common::Passwords::HasMaster::get() && ++ officecfg::Office::Common::Passwords::StorageVersion::get() == 0) ++ { ++ // master password stored in deprecated format ++ VclPtr pOldMasterPasswordInfoBar = ++ AppendInfoBar("oldmasterpassword", "", ++ SfxResId(STR_REFRESH_MASTER_PASSWORD), InfobarType::DANGER, false); ++ if (pOldMasterPasswordInfoBar) ++ { ++ VclPtrInstance const xBtn(&GetWindow()); ++ xBtn->SetText(SfxResId(STR_REFRESH_PASSWORD)); ++ xBtn->SetSizePixel(xBtn->GetOptimalSize()); ++ xBtn->SetClickHdl(LINK(this, ++ SfxViewFrame, RefreshMasterPasswordHdl)); ++ pOldMasterPasswordInfoBar->addButton(xBtn); ++ } ++ } ++ + // read-only infobar if necessary + const SfxViewShell *pVSh; + const SfxShell *pFSh; +@@ -1565,6 +1584,27 @@ IMPL_LINK_NOARG(SfxViewFrame, SignDocumentHandler, Button*, void) + GetDispatcher()->Execute(SID_SIGNATURE); + } + ++IMPL_LINK_NOARG(SfxViewFrame, RefreshMasterPasswordHdl, Button*, void) ++{ ++ bool bChanged = false; ++ try ++ { ++ Reference< task::XPasswordContainer2 > xMasterPasswd( ++ task::PasswordContainer::create(comphelper::getProcessComponentContext())); ++ ++ css::uno::Reference xFrame = GetFrame().GetFrameInterface(); ++ css::uno::Reference xContainerWindow = xFrame->getContainerWindow(); ++ ++ uno::Reference xTmpHandler(task::InteractionHandler::createWithParent(comphelper::getProcessComponentContext(), ++ xContainerWindow)); ++ bChanged = xMasterPasswd->changeMasterPassword(xTmpHandler); ++ } ++ catch (const Exception&) ++ {} ++ if (bChanged) ++ RemoveInfoBar(u"oldmasterpassword"); ++} ++ + void SfxViewFrame::Construct_Impl( SfxObjectShell *pObjSh ) + { + m_pImpl->bResizeInToOut = true; +-- +cgit v1.2.1 + diff --git a/debian/patches/ZDI-CAN-17859.diff b/debian/patches/ZDI-CAN-17859.diff new file mode 100644 index 00000000000..9b668c4b3df --- /dev/null +++ b/debian/patches/ZDI-CAN-17859.diff @@ -0,0 +1,290 @@ +From e36986a3a7f448722961bde79691fb2f225c48ea Mon Sep 17 00:00:00 2001 +From: Stephan Bergmann +Date: Tue, 30 Aug 2022 14:04:52 +0200 +Subject: These commands are always URLs already + +Conflicts: + wizards/source/scriptforge/SF_Session.xba + +Change-Id: I5083765c879689d7f933bbe00ad70bb68e635a21 +Reviewed-on: https://gerrit.libreoffice.org/c/core/+/139042 +Tested-by: Jean-Pierre Ledure +Tested-by: Jenkins +Reviewed-by: Stephan Bergmann +--- + wizards/source/access2base/DoCmd.xba | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/wizards/source/access2base/DoCmd.xba b/wizards/source/access2base/DoCmd.xba +index 27b0d74be34f..26755a8d901d 100644 +--- a/wizards/source/access2base/DoCmd.xba ++++ b/wizards/source/access2base/DoCmd.xba +@@ -2655,7 +2655,7 @@ Private Sub _ShellExecute(sCommand As String) + + Dim oShell As Object + Set oShell = createUnoService("com.sun.star.system.SystemShellExecute") +- oShell.execute(sCommand, "" , com.sun.star.system.SystemShellExecuteFlags.DEFAULTS) ++ oShell.execute(sCommand, "" , com.sun.star.system.SystemShellExecuteFlags.URIS_ONLY) + + End Sub ' _ShellExecute V0.8.5 + +-- +cgit v1.2.1 + +From 7c299586526c29875d2d1438c95580c18835c99b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Tue, 30 Aug 2022 17:01:08 +0100 +Subject: check IFrame "FrameURL" target + +similiar to + +commit b3edf85e0fe6ca03dc26e1bf531be82193bc9627 +Date: Wed Aug 7 17:37:11 2019 +0100 + + warn on load when a document binds an event to a macro + +Conflicts: + sfx2/source/doc/iframe.cxx + sw/source/filter/html/htmlplug.cxx + sw/source/filter/xml/xmltexti.cxx + +Change-Id: Iea888b1c083d2dc69ec322309ac9ae8c5e5eb315 +Reviewed-on: https://gerrit.libreoffice.org/c/core/+/139059 +Tested-by: Jenkins +Reviewed-by: Stephan Bergmann +--- + sfx2/source/appl/macroloader.cxx | 9 +++++++-- + sfx2/source/doc/iframe.cxx | 20 +++++++++++++++----- + sfx2/source/inc/macroloader.hxx | 2 ++ + sw/source/filter/html/htmlplug.cxx | 7 ++++++- + sw/source/filter/xml/xmltexti.cxx | 9 +++++++-- + 5 files changed, 37 insertions(+), 10 deletions(-) + +diff --git a/sfx2/source/appl/macroloader.cxx b/sfx2/source/appl/macroloader.cxx +index 98e036e0a7ea..b50d1e63c789 100644 +--- a/sfx2/source/appl/macroloader.cxx ++++ b/sfx2/source/appl/macroloader.cxx +@@ -68,10 +68,10 @@ css::uno::Sequence SAL_CALL SfxMacroLoader::getSupportedServiceNames() + return { "com.sun.star.frame.ProtocolHandler" }; + } + +-SfxObjectShell* SfxMacroLoader::GetObjectShell_Impl() ++SfxObjectShell* SfxMacroLoader::GetObjectShell(const Reference & xFrame) + { + SfxObjectShell* pDocShell = nullptr; +- Reference < XFrame > xFrame( m_xFrame.get(), UNO_QUERY ); ++ + if ( xFrame.is() ) + { + SfxFrame* pFrame=nullptr; +@@ -96,6 +96,11 @@ SfxObjectShell* SfxMacroLoader::GetObjectShell_Impl() + return pDocShell; + } + ++SfxObjectShell* SfxMacroLoader::GetObjectShell_Impl() ++{ ++ Reference < XFrame > xFrame( m_xFrame.get(), UNO_QUERY ); ++ return SfxMacroLoader::GetObjectShell(xFrame); ++} + + uno::Reference SAL_CALL SfxMacroLoader::queryDispatch( + const util::URL& aURL , +diff --git a/sfx2/source/doc/iframe.cxx b/sfx2/source/doc/iframe.cxx +index 8b1271545dfb..aea851894286 100644 +--- a/sfx2/source/doc/iframe.cxx ++++ b/sfx2/source/doc/iframe.cxx +@@ -38,10 +38,12 @@ + #include + #include + #include ++#include + #include + #include + #include + #include ++#include + + using namespace ::com::sun::star; + +@@ -159,6 +161,19 @@ sal_Bool SAL_CALL IFrameObject::load( + { + if ( SvtMiscOptions().IsPluginsEnabled() ) + { ++ util::URL aTargetURL; ++ aTargetURL.Complete = maFrmDescr.GetURL().GetMainURL( INetURLObject::DecodeMechanism::NONE ); ++ uno::Reference < util::XURLTransformer > xTrans( util::URLTransformer::create( mxContext ) ); ++ xTrans->parseStrict( aTargetURL ); ++ ++ if (INetURLObject(aTargetURL.Complete).GetProtocol() == INetProtocol::Macro) ++ { ++ uno::Reference xParentFrame = xFrame->getCreator(); ++ SfxObjectShell* pDoc = SfxMacroLoader::GetObjectShell(xParentFrame); ++ if (pDoc && !pDoc->AdjustMacroMode()) ++ return false; ++ } ++ + DBG_ASSERT( !mxFrame.is(), "Frame already existing!" ); + VclPtr pParent = VCLUnoHelper::GetWindow( xFrame->getContainerWindow() ); + VclPtr pWin = VclPtr::Create( pParent, maFrmDescr.IsFrameBorderOn() ); +@@ -181,11 +196,6 @@ sal_Bool SAL_CALL IFrameObject::load( + if ( xFramesSupplier.is() ) + mxFrame->setCreator( xFramesSupplier ); + +- util::URL aTargetURL; +- aTargetURL.Complete = maFrmDescr.GetURL().GetMainURL( INetURLObject::DecodeMechanism::NONE ); +- uno::Reference < util::XURLTransformer > xTrans( util::URLTransformer::create( mxContext ) ); +- xTrans->parseStrict( aTargetURL ); +- + uno::Sequence < beans::PropertyValue > aProps(2); + aProps[0].Name = "PluginMode"; + aProps[0].Value <<= sal_Int16(2); +diff --git a/sfx2/source/inc/macroloader.hxx b/sfx2/source/inc/macroloader.hxx +index 9e1dfba18ed0..b3e7a5ec1abc 100644 +--- a/sfx2/source/inc/macroloader.hxx ++++ b/sfx2/source/inc/macroloader.hxx +@@ -82,6 +82,8 @@ public: + virtual void SAL_CALL addStatusListener( const css::uno::Reference< css::frame::XStatusListener >& xControl, const css::util::URL& aURL ) override; + + virtual void SAL_CALL removeStatusListener( const css::uno::Reference< css::frame::XStatusListener >& xControl, const css::util::URL& aURL ) override; ++ ++ static SfxObjectShell* GetObjectShell(const css::uno::Reference& xFrame); + }; + + #endif +diff --git a/sw/source/filter/html/htmlplug.cxx b/sw/source/filter/html/htmlplug.cxx +index a0da671de733..eb707040adb2 100644 +--- a/sw/source/filter/html/htmlplug.cxx ++++ b/sw/source/filter/html/htmlplug.cxx +@@ -1087,7 +1087,12 @@ void SwHTMLParser::InsertFloatingFrame() + bool bHasBorder = aFrameDesc.HasFrameBorder(); + Size aMargin = aFrameDesc.GetMargin(); + +- xSet->setPropertyValue("FrameURL", uno::makeAny( aFrameDesc.GetURL().GetMainURL( INetURLObject::DecodeMechanism::NONE ) ) ); ++ OUString sHRef = aFrameDesc.GetURL().GetMainURL( INetURLObject::DecodeMechanism::NONE ); ++ ++ if (INetURLObject(sHRef).GetProtocol() == INetProtocol::Macro) ++ NotifyMacroEventRead(); ++ ++ xSet->setPropertyValue("FrameURL", uno::makeAny( sHRef ) ); + xSet->setPropertyValue("FrameName", uno::makeAny( aName ) ); + + if ( eScroll == ScrollingMode::Auto ) +diff --git a/sw/source/filter/xml/xmltexti.cxx b/sw/source/filter/xml/xmltexti.cxx +index 788bec5c2d47..169cbdc1534d 100644 +--- a/sw/source/filter/xml/xmltexti.cxx ++++ b/sw/source/filter/xml/xmltexti.cxx +@@ -853,9 +853,14 @@ uno::Reference< XPropertySet > SwXMLTextImportHelper::createAndInsertFloatingFra + uno::Reference < beans::XPropertySet > xSet( xObj->getComponent(), uno::UNO_QUERY ); + if ( xSet.is() ) + { ++ OUString sHRef = URIHelper::SmartRel2Abs( ++ INetURLObject( GetXMLImport().GetBaseURL() ), rHRef ); ++ ++ if (INetURLObject(sHRef).GetProtocol() == INetProtocol::Macro) ++ GetXMLImport().NotifyMacroEventRead(); ++ + xSet->setPropertyValue("FrameURL", +- makeAny( URIHelper::SmartRel2Abs( +- INetURLObject( GetXMLImport().GetBaseURL() ), rHRef ) ) ); ++ makeAny( sHRef ) ); + + xSet->setPropertyValue("FrameName", + makeAny( rName ) ); +-- +cgit v1.2.1 + +From 2f7e7dbebb28123b1e608c30af6cc335e7b5ed2f Mon Sep 17 00:00:00 2001 +From: Stephan Bergmann +Date: Thu, 1 Sep 2022 17:33:51 +0200 +Subject: Filter out unwanted command URIs + +Conflicts: + desktop/source/app/cmdlineargs.cxx + +Change-Id: I0b7e5329af8cc053d14d5c60ec14fe7f364ef993 +Reviewed-on: https://gerrit.libreoffice.org/c/core/+/139225 +Tested-by: Jenkins +Reviewed-by: Stephan Bergmann +--- + desktop/source/app/cmdlineargs.cxx | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) + +diff --git a/desktop/source/app/cmdlineargs.cxx b/desktop/source/app/cmdlineargs.cxx +index 381147cd534e..f004f4b179dd 100644 +--- a/desktop/source/app/cmdlineargs.cxx ++++ b/desktop/source/app/cmdlineargs.cxx +@@ -28,6 +28,7 @@ + #include "cmdlineargs.hxx" + #include + #include ++#include + #include + #include + #include +@@ -169,7 +170,14 @@ CommandLineEvent CheckOfficeURI(/* in,out */ OUString& arg, CommandLineEvent cur + } + if (nURIlen < 0) + nURIlen = rest2.getLength(); +- arg = rest2.copy(0, nURIlen); ++ auto const uri = rest2.copy(0, nURIlen); ++ if (INetURLObject(uri).GetProtocol() == INetProtocol::Macro) { ++ // Let the "Open" machinery process the full command URI (leading to failure, by intention, ++ // as the "Open" machinery does not know about those command URI schemes): ++ curEvt = CommandLineEvent::Open; ++ } else { ++ arg = uri; ++ } + return curEvt; + } + +-- +cgit v1.2.1 + +From 46216a79f440dc972724bb243396b295267530ce Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Tue, 6 Sep 2022 11:38:55 +0100 +Subject: check impress/calc IFrame "FrameURL" target +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +similar to + +commit c7450d0b9d02c64ae3da467d329040787039767e +Date: Tue Aug 30 17:01:08 2022 +0100 + + check IFrame "FrameURL" target + +Change-Id: Ibf28c29acb4476830431d02772f3ecd4b23a6a27 +Reviewed-on: https://gerrit.libreoffice.org/c/core/+/139480 +Tested-by: Jenkins +Reviewed-by: Caolán McNamara +--- + xmloff/source/draw/ximpshap.cxx | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/xmloff/source/draw/ximpshap.cxx b/xmloff/source/draw/ximpshap.cxx +index af0bfc1a7ef0..94ac8532b6c9 100644 +--- a/xmloff/source/draw/ximpshap.cxx ++++ b/xmloff/source/draw/ximpshap.cxx +@@ -90,6 +90,7 @@ + #include + #include + #include ++#include + #include + #include + +@@ -3265,6 +3265,9 @@ void SdXMLFloatingFrameShapeContext::StartElement( const css::uno::Reference< cs + + if( !maHref.isEmpty() ) + { ++ if (INetURLObject(maHref).GetProtocol() == INetProtocol::Macro) ++ GetImport().NotifyMacroEventRead(); ++ + xProps->setPropertyValue("FrameURL", Any(maHref) ); + } + } +-- +cgit v1.2.1 + diff --git a/debian/patches/add-access2base-doc.diff b/debian/patches/add-access2base-doc.diff new file mode 100644 index 0000000000000000000000000000000000000000..4ad717862070dfb1e79fbdb9160dfa55f5885ba8 GIT binary patch literal 1308520 zcmeFa`&JuC(g*lAeu}dDcq9zy0{Di9>A`@znc?CAxjp@1wvUhsP+PZA31ixHpM8gY z!+nzd{URc>vPvZZ?w*-%_pE1HNL6`_jEs9mE-fuZ)pq=;+P~~}=ay^rmrJ#0OZ6Ag za&7JDi?!NH<>iZ&`txTm>(8Tw8vZ?4SXhXf)vL}g%~3n4CWFgSE3P(MtvE@RPn${R zd*x!>vsUZ%B{Wg5t<_(wt*lg5o<3W7@%;Hy*Xm#Y8ZFfpYtce|arx=W%4+o2zdl&_ z^TVx!&Bl*!w zdUP=!57(;ItE;QZ)kyO6q z=W+Gt=BK6>WB1kSpC2A?Zf!I+jvp+1YK|hS7Oh8L#+`9DUW*c>~n7QU4q{q3?JN6RaVSls%`qxr=M zgNXYqo~%V*e*N{;g9Q%bm|>d5%D7mu4*g7I)E{?}#a)B2;$K_3;zOAXBBQPk33 zHYoz}RqLWTO5*YQ<@jvr#iOX|Tj@7@n0;$7ydHJVFUCRT2Mg)sq830kj@!}cb@aD* z6!)&9!^>nm=r2a)pY``~b9@pFlHMR0oQvgN8$Q1TRn{19U{!>rMzqQ+tFnbN1cA8n;_zo(@wuR zx{l5Uqh7KYU3JD6(O@Kh2bbfhH)waxIxT5@@xelK6i35&)a#5n*WqaJsnf=n@kMit zj~K0VyMwDv|C}Ihci3$bu@V+!ZE{FSG&pl(X${&a2ABaO#!ZZo?KMvapJKFSz>oTa zaiRDH;Ge3LxMHfSI)~Tk#)11_GbsYY$qN zJs_m68rGo-pbzk7^kAU}L>hIP-6RFDEQ{0&7F6c5A7jPhku*wFB|KQL2syCjd^rJq zXPgjtiXwwif(?2doyHFqfF^+BAd35KJVv7H>;dX@YZx0WC*xB0N zieCR1HNM}DHV@wZc)0W3_l@ZLgWav|!=q?pe+y6d8;3iu-!%^KptNy>nk9L$vH#

}uangtEF8Rv_O=f$kb}?6^7S@Gx$$~; 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%0ATq6XCe>O- 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�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Р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 z

K;dMf4|9+QE~!nES0VO|Bb=*0~Yh4F=@kaWWCR2`$)g<69rEX>dMu!aUgs zR10P{rH|GP4wYzEQmqWOJtA*%Ihc4@A=F%H8NGdG#;HtiSd?Ik=~ za|1=!)iPbP8_;`xtJNplNy=uSDxdDFy!?yNwzogc$EN-Tg1q+7YMNXZJ> zpJ7bVdF%OXcpxVl_y?u05-UBIw^k-I)d($BLEsm3s_Jv;d+3{8kV3C#wg^mNZYJl_ zdCqYBwgZy>Mbl|cQFot)(T^AD&v?i0W4ZKr?L9w4_*2ym6%JU{c`2$JR`}GpeDJHSA5pmSyUOiK zt~cjn(L-{RxJIWjhRYr0!uhp5EH_u+bdGTy!#=|fr#at~xBRx0g z{m;ZX-hVT|Z@k}HU^A_tnW+R-1tzk`i`l2Lbp;Cx80D)xhnGL$kNxi5!oqda{CRYg zA$F6yjlBN8TgJVw24z|I9xpF06S3t2e(M~?!(rhcKYr}?e5yOj4FnEfGtIx(5TF2L z+x_do;pfMU;5kc~-)p&aOY!a;`L ztWvJ1rClVun=Ar;MRTmyEjc;2tA@xTMZ{6A zNS9?>C_27x0Mp&!aCk(XOU;iKNTi6MHkF%=R*kYpO7LUc`S%6~5)h}26tEC1J5RXo zU|AN)HbB@m2fBbnd8Gg|@^b280Lm=lVmU;9W=#~nbEYE{ybA9UOR(mle&qUg>#n=A)kiLP;Yd_Y$*d7YdqX;`D4 zU?xm;Vm5{1ehWE!_y~opQ>~jTf#E^BREgjqO&M@HWulC7ZsWYmDHB{O&Ev}`(+Ny5 zZMh@6lP_T=FYy1=T^q%c=AJ&(DKq8AKZpnB^{@4kGv+&{x* zz~)hHoI78hO}MUBz4ELXOsrAH;QBF}j`a^@-e|}S;?o2ST!HmTb>5rKk4vmS(*`&l z23Y^2V7)kZiSy|c6kB_PV_@6z1;;=*cg-oVuK&YM0hoFtT>Z;sBP7Ui(hZZh94eNXy>rV?F+QptX>lSz32G@m|8Qq^&W@auoo70m+{LD<@I;pRal(0>iboUzJ zPU6TJx(MOvzLM~FWj4Zcr5AhLt40HqOWg7(Ce_=s7LYo*U5n`ymz2(7|L7Fi3*v{$ z$S9jvEL>Pn|01KR-+`7_wDx0H5qPQ@45j?$8@yP;7$T|DMp^C5M&crKOJ%?=MA-AQ zuO_9AhFb|ONasgi$cnH6D56(1-F=(WUF~z z$*Zbt3Y-uEH56k_*50}rRvWG`FB0b1*Y~(3BZBZ+NqOX?XXfH}N+u^f-rU;Od0HpilR|6%#3Jk>XuCMM>HM(!CsGq$(aX`Wx95Fc zOznp*o|#sTKQQAR)s(ziM?j1dJu4kK>L?GrLWiq{EI3Z+4N(G$c6=)i5Qrd8qa3~9RQc@l})mf$6F4#@79%rYlHhclP_8dNS8VsFLsEYOc%!d3SZ;bomIta-X#$K*m|<5GheRE^w}AP|Sr>7J zIzCX8h+RYsb`SWOnP-ZCwCEu_VsdA3{S(9HG%;yz8IGO1Gc)RgYqup$$sKTQPNy*k z3iW=$YGTqSTrR~3GTQkuUt6O8?QN3t_sx!l4vc&Es2e%x$4zrq|D@HNb+-C&@!|K$ zip4#lIFRtlh~-NmW@c40qAWXh!kaX4_s4+H$PQ_tVIvS56vNy%fqUIfG8Mmiz13NJ z@xrKn1!{`hP(En5$5P#+h14NuyIo6$A@6y{kaPgr8VucZiAtO;vXZ36-L211g@YX_ zt^*4&l~=g-NdL_F2er7brZ5kwNiyVxa#Gx4Cqo1=XB0z%4eYC_=#&{d>k9;QmPn*h z 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Ɍ_ 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

06w$fBTrI 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 b3$~f1XD{EpuqTf +Date: Sat, 4 Aug 2018 17:40:05 +0300 +Subject: [PATCH] apparmor: use dri-enumerate abstraction + +Remove backported rule and use new dri-enumerate abstraction instead. +dri-enumerate is available in AppArmor 2.13, which recently migrated +into Debian Buster. + +Change-Id: I64919edc1882f7bc1e65cfb94686464c5350f699 +--- + sysui/desktop/apparmor/program.soffice.bin | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/sysui/desktop/apparmor/program.soffice.bin b/sysui/desktop/apparmor/program.soffice.bin +index 2fc7fd6b5735..33ad6f933ef6 100644 +--- a/sysui/desktop/apparmor/program.soffice.bin ++++ b/sysui/desktop/apparmor/program.soffice.bin +@@ -82,6 +82,7 @@ profile libreoffice-soffice INSTDIR-program/soffice.bin { + #include + #include + #include ++ #include + #include + #include + #include +@@ -179,7 +179,6 @@ profile libreoffice-soffice INSTDIR-program/soffice.bin { + #Likely moving to abstractions in the future + owner @{HOME}/.icons/*/cursors/* r, + /etc/fstab r, # Solid::DeviceNotifier::instance() TODO: deny? +- /sys/devices/pci[0-9]*/**/{device,subsystem_device,subsystem_vendor,uevent,vendor} r, # for libdrm + /usr/share/*-fonts/conf.avail/*.conf r, + /usr/share/fonts-config/conf.avail/*.conf r, + /{,var/}run/udev/data/+usb:* r, # Solid::Device::listFromQuery() + +From 5054f7067cc5ee43933893b682e02540fce043b4 Mon Sep 17 00:00:00 2001 +From: Rene Engelhard +Date: Sat, 20 Jun 2020 15:33:34 +0200 +Subject: deb#962903 #include to allow /tmp/something/* + +Change-Id: I6377db152ededc4d46ba7bbbaa9bc66210964e18 +Reviewed-on: https://gerrit.libreoffice.org/c/core/+/96770 +Tested-by: Jenkins +Reviewed-by: Thorsten Behrens +--- + sysui/desktop/apparmor/program.senddoc | 4 ++-- + sysui/desktop/apparmor/program.soffice.bin | 3 ++- + sysui/desktop/apparmor/program.xpdfimport | 5 ++--- + 3 files changed, 6 insertions(+), 6 deletions(-) + +diff --git a/sysui/desktop/apparmor/program.senddoc b/sysui/desktop/apparmor/program.senddoc +index d659ec9b98b3..969130f4ea90 100644 +--- a/sysui/desktop/apparmor/program.senddoc ++++ b/sysui/desktop/apparmor/program.senddoc +@@ -17,8 +17,8 @@ + profile libreoffice-senddoc INSTDIR-program/senddoc { + #include + +- owner /tmp/lu** rw, #makes files like luRRRRR.tmp/lubRRRR.tmp where R is random +- #Note, usually it's lub or luc, don't know why. ++ #include ++ + /{usr/,}bin/sh rmix, + /{usr/,}bin/bash rmix, + /{usr/,}bin/dash rmix, +diff --git a/sysui/desktop/apparmor/program.soffice.bin b/sysui/desktop/apparmor/program.soffice.bin +index 212eb7c62b15..42053db2abef 100644 +--- a/sysui/desktop/apparmor/program.soffice.bin ++++ b/sysui/desktop/apparmor/program.soffice.bin +@@ -92,6 +92,8 @@ profile libreoffice-soffice INSTDIR-program/soffice.bin { + #include + #include + ++ #include ++ + #List directories for file browser + / r, + /**/ r, +@@ -116,7 +118,6 @@ profile libreoffice-soffice INSTDIR-program/soffice.bin { + owner @{HOME}/.config/soffice.binrc.lock rwk, + owner @{HOME}/.cache/fontconfig/** rw, + owner @{HOME}/.config/gtk-???/bookmarks r, #Make bookmarks work +- owner /tmp/psp[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]* rw, #/tmp/psp1534203998 (printing to file) + + owner /{,var/}run/user/*/dconf/user rw, + owner @{HOME}/.config/dconf/user r, +diff --git a/sysui/desktop/apparmor/program.xpdfimport b/sysui/desktop/apparmor/program.xpdfimport +index efe10dce020d..f8bfbfe8fa49 100644 +--- a/sysui/desktop/apparmor/program.xpdfimport ++++ b/sysui/desktop/apparmor/program.xpdfimport +@@ -17,9 +17,8 @@ + profile libreoffice-xpdfimport INSTDIR-program/xpdfimport { + #include + +- owner /tmp/* r, #Seems to need to read file created with pattern /tmp/RRRRRR +- owner /tmp/lu** rw, #makes files like luRRRRR.tmp/lubRRRR.tmp where R is random +- #Note, usually it's lub or luc, don't know why. ++ #include ++ + /usr/share/poppler/** r, + /usr/share/libreoffice/share/config/* r, + owner @{HOME}/.config/libreoffice{,dev}/?/user/uno_packages/cache/log.txt rw, +-- +cgit v1.2.1 + diff --git a/debian/patches/apparmor-complain.diff b/debian/patches/apparmor-complain.diff new file mode 100644 index 00000000000..8f96fd3046b --- /dev/null +++ b/debian/patches/apparmor-complain.diff @@ -0,0 +1,26 @@ +diff --git a/sysui/desktop/apparmor/program.oosplash b/sysui/desktop/apparmor/program.oosplash +index fef54b7ee384..9dde31a63615 100644 +--- a/sysui/desktop/apparmor/program.oosplash ++++ b/sysui/desktop/apparmor/program.oosplash +@@ -12,7 +12,7 @@ + + #include + +-profile libreoffice-oopslash INSTDIR-program/oosplash { ++profile libreoffice-oopslash INSTDIR-program/oosplash flags=(complain) { + #include + #include + +diff --git a/sysui/desktop/apparmor/program.soffice.bin b/sysui/desktop/apparmor/program.soffice.bin +index b4baeab8f5ee..7861c9eac9bd 100644 +--- a/sysui/desktop/apparmor/program.soffice.bin ++++ b/sysui/desktop/apparmor/program.soffice.bin +@@ -60,7 +60,7 @@ + + #include + +-profile libreoffice-soffice INSTDIR-program/soffice.bin { ++profile libreoffice-soffice INSTDIR-program/soffice.bin flags=(complain) { + #include + + #include diff --git a/debian/patches/apparmor-mesa.diff b/debian/patches/apparmor-mesa.diff new file mode 100644 index 00000000000..dd6dd20a633 --- /dev/null +++ b/debian/patches/apparmor-mesa.diff @@ -0,0 +1,10 @@ +--- a/sysui/desktop/apparmor/program.soffice.bin-old 2018-11-09 23:04:59.858704214 +0100 ++++ b/sysui/desktop/apparmor/program.soffice.bin 2018-11-09 23:05:28.050949237 +0100 +@@ -87,6 +87,7 @@ + #include + #include + #include ++ #include + #include + #include + #include diff --git a/debian/patches/apparmor-opencl.diff b/debian/patches/apparmor-opencl.diff new file mode 100644 index 00000000000..462f376bca1 --- /dev/null +++ b/debian/patches/apparmor-opencl.diff @@ -0,0 +1,20 @@ +apparmor: Add opencl support + +AppArmor in Debian Buster now has OpenCL abstractions. + +Include OpenCL abstractions to fix OpenCL usage in Calc. +Index: libreoffice-6.1.4/sysui/desktop/apparmor/program.soffice.bin +=================================================================== +--- libreoffice-6.1.4.orig/sysui/desktop/apparmor/program.soffice.bin 2019-01-14 19:29:25.000000000 +0200 ++++ libreoffice-6.1.4/sysui/desktop/apparmor/program.soffice.bin 2019-01-16 18:43:17.051781559 +0200 +@@ -98,6 +98,10 @@ + + #include + ++ #include ++ #include ++ #include ++ + #List directories for file browser + / r, + /**/ r, diff --git a/debian/patches/apparmor-updates.diff b/debian/patches/apparmor-updates.diff new file mode 100644 index 00000000000..1f71f8d143c --- /dev/null +++ b/debian/patches/apparmor-updates.diff @@ -0,0 +1,13 @@ +diff --git a/sysui/desktop/apparmor/program.soffice.bin b/sysui/desktop/apparmor/program.soffice.bin +index 42053db2abef..83bd9d11f93c 100644 +--- a/sysui/desktop/apparmor/program.soffice.bin ++++ b/sysui/desktop/apparmor/program.soffice.bin +@@ -101,7 +101,7 @@ profile libreoffice-soffice INSTDIR-program/soffice.bin { + owner @{libo_user_dirs}/**/ rw, #allow creating directories that we own + owner @{libo_user_dirs}/**~lock.* rw, #lock file support + owner @{libo_user_dirs}/**.@{libreoffice_ext} rwk, #Open files rw with the right exts +- owner @{libo_user_dirs}/{,**/}lu??????????{,?}.tmp rwk, #Temporary file used when saving ++ owner @{libo_user_dirs}/{,**/}lu???????????{,?}.tmp rwk, #Temporary file used when saving + owner @{libo_user_dirs}/{,**/}.directory r, #Read directory settings on KDE + + # Settings diff --git a/debian/patches/appstream-ignore-startcenter.diff b/debian/patches/appstream-ignore-startcenter.diff new file mode 100644 index 00000000000..4251d649299 --- /dev/null +++ b/debian/patches/appstream-ignore-startcenter.diff @@ -0,0 +1,10 @@ +--- a/sysui/desktop/menus/startcenter.desktop ++++ b/sysui/desktop/menus/startcenter.desktop +@@ -31,6 +31,7 @@ StartupNotify=true + X-GIO-NoFuse=true + StartupWMClass=libreoffice-startcenter + X-KDE-Protocols=file,http,ftp,webdav,webdavs ++X-AppStream-Ignore=True + + ##Define Actions + Actions=Writer;Calc;Impress;Draw;Base;Math; diff --git a/debian/patches/b0404f80577de9ff69e58390c6f6ef949fdb0139.patch b/debian/patches/b0404f80577de9ff69e58390c6f6ef949fdb0139.patch new file mode 100644 index 00000000000..15af13680c8 --- /dev/null +++ b/debian/patches/b0404f80577de9ff69e58390c6f6ef949fdb0139.patch @@ -0,0 +1,63 @@ +From b0404f80577de9ff69e58390c6f6ef949fdb0139 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Mon, 20 Dec 2021 17:05:44 +0000 +Subject: [PATCH] only use X509Data + +Change-Id: I52e6588f5fac04bb26d77c1f3af470db73e41f72 +Reviewed-on: https://gerrit.libreoffice.org/c/core/+/127193 +Tested-by: Jenkins +Reviewed-by: Miklos Vajna +(cherry picked from commit be446d81e07b5499152efeca6ca23034e51ea5ff) +Reviewed-on: https://gerrit.libreoffice.org/c/core/+/127178 +Reviewed-by: Adolfo Jayme Barrientos +--- + xmlsecurity/inc/xmlsec-wrapper.h | 4 ++++ + .../source/xmlsec/mscrypt/xmlsignature_mscryptimpl.cxx | 4 ++++ + xmlsecurity/source/xmlsec/nss/xmlsignature_nssimpl.cxx | 4 ++++ + 3 files changed, 12 insertions(+) + +diff --git a/xmlsecurity/inc/xmlsec-wrapper.h b/xmlsecurity/inc/xmlsec-wrapper.h +index e4048de94bf2a..cc149379c36be 100644 +--- a/xmlsecurity/inc/xmlsec-wrapper.h ++++ b/xmlsecurity/inc/xmlsec-wrapper.h +@@ -43,6 +43,10 @@ + #include + #include + #include ++#include ++#endif ++#ifdef XMLSEC_CRYPTO_MSCRYPTO ++#include + #endif + + #endif +diff --git a/xmlsecurity/source/xmlsec/mscrypt/xmlsignature_mscryptimpl.cxx b/xmlsecurity/source/xmlsec/mscrypt/xmlsignature_mscryptimpl.cxx +index d9b8b1eace680..824139464fbb8 100644 +--- a/xmlsecurity/source/xmlsec/mscrypt/xmlsignature_mscryptimpl.cxx ++++ b/xmlsecurity/source/xmlsec/mscrypt/xmlsignature_mscryptimpl.cxx +@@ -233,6 +233,10 @@ SAL_CALL XMLSignature_MSCryptImpl::validate( + // We do certificate verification ourselves. + pDsigCtx->keyInfoReadCtx.flags |= XMLSEC_KEYINFO_FLAGS_X509DATA_DONT_VERIFY_CERTS; + ++ // limit possible key data to valid X509 certificates only, no KeyValues ++ if (xmlSecPtrListAdd(&(pDsigCtx->keyInfoReadCtx.enabledKeyData), BAD_CAST xmlSecMSCngKeyDataX509GetKlass()) < 0) ++ throw RuntimeException("failed to limit allowed key data"); ++ + //Verify signature + //The documentation says that the signature is only valid if the return value is 0 (that is, not < 0) + //AND pDsigCtx->status == xmlSecDSigStatusSucceeded. That is, we must not make any assumptions, if +diff --git a/xmlsecurity/source/xmlsec/nss/xmlsignature_nssimpl.cxx b/xmlsecurity/source/xmlsec/nss/xmlsignature_nssimpl.cxx +index b41d754f74072..fde4b747e9322 100644 +--- a/xmlsecurity/source/xmlsec/nss/xmlsignature_nssimpl.cxx ++++ b/xmlsecurity/source/xmlsec/nss/xmlsignature_nssimpl.cxx +@@ -247,6 +247,10 @@ SAL_CALL XMLSignature_NssImpl::validate( + // We do certificate verification ourselves. + pDsigCtx->keyInfoReadCtx.flags |= XMLSEC_KEYINFO_FLAGS_X509DATA_DONT_VERIFY_CERTS; + ++ // limit possible key data to valid X509 certificates only, no KeyValues ++ if (xmlSecPtrListAdd(&(pDsigCtx->keyInfoReadCtx.enabledKeyData), BAD_CAST xmlSecNssKeyDataX509GetKlass()) < 0) ++ throw RuntimeException("failed to limit allowed key data"); ++ + //Verify signature + int rs = xmlSecDSigCtxVerify( pDsigCtx.get() , pNode ); + diff --git a/debian/patches/bash-completion-DRAWDOCS-pdf.diff b/debian/patches/bash-completion-DRAWDOCS-pdf.diff new file mode 100644 index 00000000000..898d4a0e070 --- /dev/null +++ b/debian/patches/bash-completion-DRAWDOCS-pdf.diff @@ -0,0 +1,26 @@ +From 8ef56c7cb4008c6290da82b305ec2deefc8d94d5 Mon Sep 17 00:00:00 2001 +From: Rene Engelhard +Date: Tue, 3 Nov 2020 20:34:01 +0100 +Subject: add pdf to DRAWDOCS for bash-completion + +Change-Id: I02195cb235774d205e9f9cc8821b897a841fa54f +--- + bin/generate-bash-completion.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/bin/generate-bash-completion.py b/bin/generate-bash-completion.py +index 0702a3635774..db6f49e814b5 100755 +--- a/bin/generate-bash-completion.py ++++ b/bin/generate-bash-completion.py +@@ -27,7 +27,7 @@ DRAWDOCS = ["sxd", "std", "dxf", "emf", "eps", "met", "pct", "sgf", "sgv", "sda" + "sdd", "vor", "svm", "wmf", "bmp", "gif", "jpg", "jpeg", "jfif", "fif", + "jpe", "pcd", "pcx", "pgm", "png", "ppm", "psd", "ras", "tga", "tif", + "tiff", "xbm", "xpm", "odg", "otg", "fodg", "odc", "odi", "sds", +- "wpg", "svg", "vdx", "vsd", "vsdm", "vsdx"] ++ "wpg", "svg", "vdx", "vsd", "vsdm", "vsdx", "pdf"] + + IMPRESSDOCS = ["sxi", "sti", "ppt", "pps", "pot", "sxd", "sda", "sdd", "sdp", + "vor", "cgm", "odp", "otp", "fodp", "ppsm", "ppsx", "pptm", "pptx", +-- +cgit v1.2.1 + diff --git a/debian/patches/bigendian.diff b/debian/patches/bigendian.diff new file mode 100644 index 00000000000..34caf4448dd --- /dev/null +++ b/debian/patches/bigendian.diff @@ -0,0 +1,352 @@ +From fd9422febc384208558487bfe4a69ec89ab0ddca Mon Sep 17 00:00:00 2001 +From: Stephan Bergmann +Date: Wed, 23 Sep 2020 11:41:05 +0200 +Subject: Convert attribute value to UTF-8 when passing it to libxml2 + +Using toUtf8, requiring the OUString to actually contain well-formed data, but +which is likely OK for this test-code--only function, and is also what similar +dumpAsXml functions e.g. in editeng/source/items/textitem.cxx already use. + +This appears to have been broken ever since the code's introduction in +553f10c71a2cc92f5f5890e24948f5277e3d2758 "add dumpAsXml() to more pool items", +and it would typically only have written the leading zero or one +(depending on the architecture's endianness) characters. (I ran across it on +big-endian s390x, where CppunitTest_sd_tiledrendering +SdTiledRenderingTest::testTdf104405 failed because of + +> Entity: line 2: parser error : Input is not proper UTF-8, indicate encoding ! +> Bytes: 0xCF 0x22 0x2F 0x3E +> ation=""/> +Date: Wed, 23 Sep 2020 11:53:11 +0200 +Subject: Read MOSDocumentLockFile UTF-16 string data with same endianness +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +...as MSODocumentLockFile::WriteEntryToStream has written it to (i.e., +always as UTF-16LE, assuming that is actually the right format to use). The +discrepancy between writing and reading the string data appears to be present +ever since the code's introduction in 5db1e20b8b0942dac2d50f3cd34532bb61147020 +"Introduce new lockfile handler for MSO like lockfiles". + +This caused CppunitTest_svl_lockfiles to fail on (big-endian) s390x Linux with + +> svl/qa/unit/lockfiles/test_lockfiles.cxx:578:(anonymous namespace)::LockfileTest::testWordLockFileRT +> equality assertion failed +> - Expected: LockFile Test +> - Actual : 䰀漀挀欀䘀椀氀攀 吀攀猀琀 + +etc. + +Change-Id: I97267aa14a3a926e7fd7bb1d2ce7d2de05d52a64 +Reviewed-on: https://gerrit.libreoffice.org/c/core/+/103238 +Tested-by: Jenkins +Reviewed-by: Stephan Bergmann +--- + svl/source/misc/msodocumentlockfile.cxx | 12 ++++++++++-- + 1 file changed, 10 insertions(+), 2 deletions(-) + +diff --git a/svl/source/misc/msodocumentlockfile.cxx b/svl/source/misc/msodocumentlockfile.cxx +index 9650db03999f..0c857ffb53ec 100644 +--- a/svl/source/misc/msodocumentlockfile.cxx ++++ b/svl/source/misc/msodocumentlockfile.cxx +@@ -228,8 +228,16 @@ LockFileEntry MSODocumentLockFile::GetLockData() + nUTF16Len = *++pBuf; // use Excel/PowerPoint position + + if (nUTF16Len > 0 && nUTF16Len <= 52) // skip wrong format +- aResult[LockFileComponent::OOOUSERNAME] +- = OUString(reinterpret_cast(pBuf + 2), nUTF16Len); ++ { ++ OUStringBuffer str(nUTF16Len); ++ sal_uInt8 const* p = reinterpret_cast(pBuf + 2); ++ for (int i = 0; i != nUTF16Len; ++i) ++ { ++ str.append(sal_Unicode(p[0] | (sal_uInt32(p[1]) << 8))); ++ p += 2; ++ } ++ aResult[LockFileComponent::OOOUSERNAME] = str.makeStringAndClear(); ++ } + } + } + return aResult; +-- +cgit v1.2.1 + +From 0387077e6647d7a30fd36d4ec41dfc559afe45c3 Mon Sep 17 00:00:00 2001 +From: Stephan Bergmann +Date: Wed, 23 Sep 2020 12:01:35 +0200 +Subject: Correctly read PNG into bitmaps N32BitTcA... formats (where alpha + comes first) + +This appears to be a regression introduced with +86ea64f216819696cd86d1926aff0a138ace2baf "Support for native 32bit Bitmap in VCL +and SVP (cairo) backend". It caused CppunitTest_vcl_png_test to fail on +(big-endian) Linux s390x with + +> vcl/qa/cppunit/png/PngFilterTest.cxx:176:PngFilterTest::testPng +> equality assertion failed +> - Expected: c[ff000040] +> - Actual : c[0000ff40] + +where eFormat happens to be ScanlineFormat::N32BitTcArgb, vs. +ScanlineFormat::N32BitTcBgra on e.g. Linux x86-64 (and which thus didn't notice +the lack of support for N32BitTcA... formats where alpha goes first instead of +last). + +Change-Id: Id6030468718f6ef831b42f2b5ad7ba2c4c46a805 +Reviewed-on: https://gerrit.libreoffice.org/c/core/+/103240 +Tested-by: Jenkins +Reviewed-by: Stephan Bergmann +--- + vcl/source/filter/png/PngImageReader.cxx | 11 ++++++++++- + 1 file changed, 10 insertions(+), 1 deletion(-) + +diff --git a/vcl/source/filter/png/PngImageReader.cxx b/vcl/source/filter/png/PngImageReader.cxx +index fae4b29a339a..ab5097bfce2c 100644 +--- a/vcl/source/filter/png/PngImageReader.cxx ++++ b/vcl/source/filter/png/PngImageReader.cxx +@@ -187,6 +187,8 @@ bool reader(SvStream& rStream, BitmapEx& rBitmapEx, bool bUseBitmap32) + for (auto& rRow : aRows) + rRow.resize(aRowSizeBytes, 0); + ++ auto const alphaFirst = (eFormat == ScanlineFormat::N32BitTcAbgr ++ || eFormat == ScanlineFormat::N32BitTcArgb); + for (int pass = 0; pass < nNumberOfPasses; pass++) + { + for (png_uint_32 y = 0; y < height; y++) +@@ -198,10 +200,17 @@ bool reader(SvStream& rStream, BitmapEx& rBitmapEx, bool bUseBitmap32) + for (size_t i = 0; i < aRowSizeBytes; i += 4) + { + sal_Int8 alpha = pRow[i + 3]; ++ if (alphaFirst) ++ { ++ pScanline[iColor++] = alpha; ++ } + pScanline[iColor++] = vcl::bitmap::premultiply(pRow[i + 0], alpha); + pScanline[iColor++] = vcl::bitmap::premultiply(pRow[i + 1], alpha); + pScanline[iColor++] = vcl::bitmap::premultiply(pRow[i + 2], alpha); +- pScanline[iColor++] = alpha; ++ if (!alphaFirst) ++ { ++ pScanline[iColor++] = alpha; ++ } + } + } + } +-- +cgit v1.2.1 + +From 646a69757b928aeaf6e0d0d41c4b30c02803a3a3 Mon Sep 17 00:00:00 2001 +From: Stephan Bergmann +Date: Thu, 24 Sep 2020 14:51:16 +0200 +Subject: Fix endianness issues in OOX crypto routines + +...without which CppunitTest_sw_ooxmlencryption failed on (big-endian) s390x: + +* The 32-bit segment counter in AgileEngine::de-/encrypt apparently needs to be + stored in LSB format (at least, if it is, CppunitTest_sw_ooxmlencryption + ultimately succeeded, whereas otherwise it failed). + +* The UTF-16 string in Standard2007Engine::calculateEncryptionKey apparently + needs to be in LSB format (at least, if it is, CppunitTest_sw_ooxmlencryption + ultimately succeeded, whereas otherwise it failed). + +* The various 32-bit values in the EncryptionStandardHeader and + EncryptionVerifierAES data structures apparently need to be written out in LSB + format in Standard2007Engine::writeEncryptionInfo, given that they are always + read in LSB format in Standard2007Engine::readEncryptionInfo. + +Change-Id: I3a1efbfe324b1bbd539b88dc5d40bb44f9676ffa +Reviewed-on: https://gerrit.libreoffice.org/c/core/+/103315 +Tested-by: Jenkins +Reviewed-by: Stephan Bergmann +--- + oox/source/crypto/AgileEngine.cxx | 16 ++++++++++------ + oox/source/crypto/Standard2007Engine.cxx | 28 ++++++++++++++++++++-------- + 2 files changed, 30 insertions(+), 14 deletions(-) + +diff --git a/oox/source/crypto/AgileEngine.cxx b/oox/source/crypto/AgileEngine.cxx +index e1ce103c5d0c..ad01e31def83 100644 +--- a/oox/source/crypto/AgileEngine.cxx ++++ b/oox/source/crypto/AgileEngine.cxx +@@ -461,9 +461,11 @@ bool AgileEngine::decrypt(BinaryXInputStream& aInputStream, + + while ((inputLength = aInputStream.readMemory(inputBuffer.data(), inputBuffer.size())) > 0) + { +- sal_uInt8* segmentBegin = reinterpret_cast(&segment); +- sal_uInt8* segmentEnd = segmentBegin + sizeof(segment); +- std::copy(segmentBegin, segmentEnd, saltWithBlockKey.begin() + saltSize); ++ auto p = saltWithBlockKey.begin() + saltSize; ++ p[0] = segment & 0xFF; ++ p[1] = (segment >> 8) & 0xFF; ++ p[2] = (segment >> 16) & 0xFF; ++ p[3] = segment >> 24; + + hashCalc(hash, saltWithBlockKey, mInfo.hashAlgorithm); + +@@ -804,9 +806,11 @@ void AgileEngine::encrypt(const css::uno::Reference & rx + inputLength : oox::crypto::roundUp(inputLength, sal_uInt32(mInfo.blockSize)); + + // Update Key +- sal_uInt8* segmentBegin = reinterpret_cast(&nSegment); +- sal_uInt8* segmentEnd = segmentBegin + nSegmentByteSize; +- std::copy(segmentBegin, segmentEnd, saltWithBlockKey.begin() + saltSize); ++ auto p = saltWithBlockKey.begin() + saltSize; ++ p[0] = nSegment & 0xFF; ++ p[1] = (nSegment >> 8) & 0xFF; ++ p[2] = (nSegment >> 16) & 0xFF; ++ p[3] = nSegment >> 24; + + hashCalc(hash, saltWithBlockKey, mInfo.hashAlgorithm); + +diff --git a/oox/source/crypto/Standard2007Engine.cxx b/oox/source/crypto/Standard2007Engine.cxx +index ec9269e771fc..c3b0efad962e 100644 +--- a/oox/source/crypto/Standard2007Engine.cxx ++++ b/oox/source/crypto/Standard2007Engine.cxx +@@ -77,12 +77,12 @@ bool Standard2007Engine::calculateEncryptionKey(const OUString& rPassword) + std::vector initialData(saltSize + passwordByteLength); + std::copy(saltArray, saltArray + saltSize, initialData.begin()); + +- const sal_uInt8* passwordByteArray = reinterpret_cast(rPassword.getStr()); +- +- std::copy( +- passwordByteArray, +- passwordByteArray + passwordByteLength, +- initialData.begin() + saltSize); ++ auto p = initialData.begin() + saltSize; ++ for (sal_Int32 i = 0; i != rPassword.getLength(); ++i) { ++ auto c = rPassword[i]; ++ *p++ = c & 0xFF; ++ *p++ = c >> 8; ++ } + + // use "hash" vector for result of sha1 hashing + // calculate SHA1 hash of initialData +@@ -221,11 +221,23 @@ void Standard2007Engine::writeEncryptionInfo(BinaryXOutputStream& rStream) + sal_uInt32 headerSize = encryptionHeaderSize + cspNameSize; + rStream.WriteUInt32(headerSize); + +- rStream.writeMemory(&mInfo.header, encryptionHeaderSize); ++ rStream.WriteUInt32(mInfo.header.flags); ++ rStream.WriteUInt32(mInfo.header.sizeExtra); ++ rStream.WriteUInt32(mInfo.header.algId); ++ rStream.WriteUInt32(mInfo.header.algIdHash); ++ rStream.WriteUInt32(mInfo.header.keyBits); ++ rStream.WriteUInt32(mInfo.header.providedType); ++ rStream.WriteUInt32(mInfo.header.reserved1); ++ rStream.WriteUInt32(mInfo.header.reserved2); + rStream.writeUnicodeArray(lclCspName); + rStream.WriteUInt16(0); + +- rStream.writeMemory(&mInfo.verifier, sizeof(msfilter::EncryptionVerifierAES)); ++ rStream.WriteUInt32(mInfo.verifier.saltSize); ++ rStream.writeMemory(&mInfo.verifier.salt, sizeof mInfo.verifier.salt); ++ rStream.writeMemory(&mInfo.verifier.encryptedVerifier, sizeof mInfo.verifier.encryptedVerifier); ++ rStream.WriteUInt32(mInfo.verifier.encryptedVerifierHashSize); ++ rStream.writeMemory( ++ &mInfo.verifier.encryptedVerifierHash, sizeof mInfo.verifier.encryptedVerifierHash); + } + + void Standard2007Engine::encrypt(const css::uno::Reference & rxInputStream, +-- +cgit v1.2.1 + +From 13251ea5da9a1761740cc65ce6c50c897f12c698 Mon Sep 17 00:00:00 2001 +From: Stephan Bergmann +Date: Thu, 24 Sep 2020 09:44:46 +0200 +Subject: More fixes of PDFium-provided strings, in test code + +...similar to 08705b75ff8b5a10dc039a9aa1042e04a281729a "These PDFium-provided +strings are always in UTF-16LE". + +Change-Id: Ic2945470db12a50e90b0feb3bbc6b63449fc39ab +Reviewed-on: https://gerrit.libreoffice.org/c/core/+/103289 +Tested-by: Jenkins +Reviewed-by: Stephan Bergmann +--- + vcl/qa/cppunit/pdfexport/pdfexport.cxx | 31 +++++++++++++++++++++++++++++-- + 1 file changed, 29 insertions(+), 2 deletions(-) + +diff --git a/vcl/qa/cppunit/pdfexport/pdfexport.cxx b/vcl/qa/cppunit/pdfexport/pdfexport.cxx +index 96dce4aff82a..94d583a0c52f 100644 +--- a/vcl/qa/cppunit/pdfexport/pdfexport.cxx ++++ b/vcl/qa/cppunit/pdfexport/pdfexport.cxx +@@ -29,6 +29,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -1700,6 +1701,12 @@ void PdfExportTest::testTdf115262() + unsigned long nTextSize = FPDFTextObj_GetText(pPageObject, pTextPage, nullptr, 0); + std::vector aText(nTextSize); + FPDFTextObj_GetText(pPageObject, pTextPage, aText.data(), nTextSize); ++#if defined OSL_BIGENDIAN ++ // The data returned by FPDFTextObj_GetText is documented to always be UTF-16LE: ++ for (auto & j: aText) { ++ j = OSL_SWAPWORD(j); ++ } ++#endif + OUString sText(aText.data(), nTextSize / 2 - 1); + if (sText == "400") + nRowTop = fTop; +@@ -1735,6 +1742,12 @@ void PdfExportTest::testTdf121962() + unsigned long nTextSize = FPDFTextObj_GetText(pPageObject, pTextPage, nullptr, 0); + std::vector aText(nTextSize); + FPDFTextObj_GetText(pPageObject, pTextPage, aText.data(), nTextSize); ++#if defined OSL_BIGENDIAN ++ // The data returned by FPDFTextObj_GetText is documented to always be UTF-16LE: ++ for (auto & j: aText) { ++ j = OSL_SWAPWORD(j); ++ } ++#endif + OUString sText(aText.data(), nTextSize / 2 - 1); + CPPUNIT_ASSERT(sText != "** Expression is faulty **"); + } +@@ -1767,6 +1780,12 @@ void PdfExportTest::testTdf115967() + unsigned long nTextSize = FPDFTextObj_GetText(pPageObject, pTextPage, nullptr, 2); + std::vector aText(nTextSize); + FPDFTextObj_GetText(pPageObject, pTextPage, aText.data(), nTextSize); ++#if defined OSL_BIGENDIAN ++ // The data returned by FPDFTextObj_GetText is documented to always be UTF-16LE: ++ for (auto & j: aText) { ++ j = OSL_SWAPWORD(j); ++ } ++#endif + OUString sChar(aText.data(), nTextSize / 2 - 1); + sText += sChar.trim(); + } diff --git a/debian/patches/build-against-shared-lpsolve.diff b/debian/patches/build-against-shared-lpsolve.diff new file mode 100644 index 00000000000..ddd80de1aaa --- /dev/null +++ b/debian/patches/build-against-shared-lpsolve.diff @@ -0,0 +1,27 @@ +diff --git a/configure.ac b/configure.ac +index cdae8b5..49f3ba2 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -9468,8 +9468,9 @@ if test "$with_system_lpsolve" = "yes"; then + # some systems need this. Like Ubuntu... + AC_CHECK_LIB(m, floor) + AC_CHECK_LIB(dl, dlopen) ++ AC_CHECK_LIB(colamd, colamd) + AC_CHECK_LIB([lpsolve55], [make_lp], [:], +- [ AC_MSG_ERROR(lpsolve library not found or too old.)], []) ++ [ AC_MSG_ERROR(lpsolve library not found or too old.)], [-L/usr/lib/lp_solve]) + LIBS=$save_LIBS + else + AC_MSG_RESULT([internal]) +diff --git a/RepositoryExternal.mk b/RepositoryExternal.mk +index a4daea7..0dea12d 100644 +--- a/RepositoryExternal.mk ++++ b/RepositoryExternal.mk +@@ -1961,6 +1961,7 @@ ifeq ($(WITH_LPSOLVER),lpsolve) + + define gb_LinkTarget__use_lpsolve + $(call gb_LinkTarget_add_libs,$(1),-llpsolve55) ++$(call gb_LinkTarget_add_ldflags,$(1),-L/usr/lib/lp_solve -Wl$(COMMA)-rpath=/usr/lib/lp_solve) + $(call gb_LinkTarget_add_defs,$(1),\ + -DSYSTEM_LPSOLVE \ + ) diff --git a/debian/patches/cppunit-optional.diff b/debian/patches/cppunit-optional.diff new file mode 100644 index 00000000000..8651a06559d --- /dev/null +++ b/debian/patches/cppunit-optional.diff @@ -0,0 +1,185 @@ +diff --git a/configure.ac b/configure.ac +index c12fe95a561c..66d327ae8fb8 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -2047,6 +2047,11 @@ AC_ARG_WITH(bffvalidator, + See https://www.microsoft.com/en-us/download/details.aspx?id=26794]), + ,with_bffvalidator=no) + ++libo_FUZZ_ARG_WITH(cppunit, ++ AS_HELP_STRING([--without-cppunit>], ++ [disable building(!) of cppunit stuff also built during make build]), ++,with_cppunit=yes) ++ + libo_FUZZ_ARG_WITH(junit, + AS_HELP_STRING([--with-junit=], + [Specifies the JUnit 4 jar file to use for JUnit-based tests. +@@ -7932,8 +7959,12 @@ dnl =================================================================== + dnl Check for system cppunit + dnl =================================================================== + if test "$_os" != "Android" ; then ++ if test "$with_cppunit" != "no"; then + libo_CHECK_SYSTEM_MODULE([cppunit],[CPPUNIT],[cppunit >= 1.14.0]) ++ ENABLE_CPPUNIT=TRUE ++ fi + fi ++AC_SUBST(ENABLE_CPPUNIT) + + dnl =================================================================== + dnl Check whether freetype is available +diff --git a/config_host.mk.in b/config_host.mk.in +index 880895e3c00f..a3dab3e00979 100644 +--- a/config_host.mk.in ++++ b/config_host.mk.in +@@ -114,6 +115,7 @@ export SYSTEM_COINMP=@SYSTEM_COINMP@ + export SYSTEM_COINMP=@SYSTEM_COINMP@ + export COINMP_CFLAGS=@COINMP_CFLAGS@ + export COINMP_LIBS=@COINMP_LIBS@ ++export ENABLE_CPPUNIT=@ENABLE_CPPUNIT@ + export ENABLE_CUPS=@ENABLE_CUPS@ + export ENABLE_CURL=@ENABLE_CURL@ + export ENABLE_FUZZERS=@ENABLE_FUZZERS@ +diff --git a/sal/Module_sal.mk b/sal/Module_sal.mk +index fe9523a7a6e2..719edf8c6252 100644 +--- a/sal/Module_sal.mk ++++ b/sal/Module_sal.mk +@@ -10,7 +10,6 @@ + $(eval $(call gb_Module_Module,sal)) + + $(eval $(call gb_Module_add_targets,sal,\ +- $(if $(CROSS_COMPILING),,$(if $(filter TRUE,$(DISABLE_DYNLOADING)),,Executable_cppunittester)) \ + $(if $(filter $(OS),ANDROID), \ + Library_lo-bootstrap) \ + Library_sal \ +@@ -33,4 +32,10 @@ $(eval $(call gb_Module_add_check_targets,sal,\ + + endif + ++ifeq ($(ENABLE_CPPUNIT),TRUE) ++$(eval $(call gb_Module_add_check_targets,sal,\ ++ $(if $(CROSS_COMPILING),,$(if $(filter TRUE,$(DISABLE_DYNLOADING)),,Executable_cppunittester)) \ ++)) ++endif ++ + # vim: set noet sw=4 ts=4: +diff --git a/sdext/Executable_pdf2xml.mk b/sdext/Executable_pdf2xml.mk +index 373f40da36fd..c0401bef9c7a 100644 +--- a/sdext/Executable_pdf2xml.mk ++++ b/sdext/Executable_pdf2xml.mk +@@ -13,10 +13,10 @@ $(eval $(call gb_Executable_use_sdk_api,pdf2xml)) + + $(eval $(call gb_Executable_use_externals,pdf2xml,\ + boost_headers \ +- cppunit \ + zlib \ + )) + ++ + $(eval $(call gb_Executable_set_include,pdf2xml,\ + -I$(SRCDIR)/sdext/source/pdfimport/inc \ + $$(INCLUDE) \ +@@ -27,13 +27,21 @@ $(eval $(call gb_Executable_use_libraries,pdf2xml,\ + vcl \ + comphelper \ + cppu \ +- unotest \ + cppuhelper \ + sal \ + tl \ + xo \ + )) + ++ifeq ($(ENABLE_CPPUNIT),TRUE) ++$(eval $(call gb_Executable_use_externals,pdf2xml,\ ++ cppunit \ ++)) ++$(eval $(call gb_Executable_use_libraries,pdf2xml,\ ++ unotest \ ++)) ++endif ++ + $(eval $(call gb_Executable_use_library_objects,pdf2xml,pdfimport)) + + $(eval $(call gb_Executable_add_exception_objects,pdf2xml,\ +diff --git a/smoketest/Module_smoketest.mk b/smoketest/Module_smoketest.mk +index 7e8b6d5f11f6..a084e254bf70 100644 +--- a/smoketest/Module_smoketest.mk ++++ b/smoketest/Module_smoketest.mk +@@ -12,6 +12,8 @@ $(eval $(call gb_Module_Module,smoketest)) + + ifeq ($(CROSS_COMPILING),) + ++ifeq ($(ENABLE_CPPUNIT),TRUE) ++ + $(eval $(call gb_Module_add_targets,smoketest,\ + Library_smoketest \ + Zip_smoketestdoc \ +@@ -42,6 +44,8 @@ endif + + endif + ++endif ++ + ifneq ($(ENABLE_JAVA),) + $(eval $(call gb_Module_add_targets,smoketest,\ + Jar_smoketest \ +diff --git a/test/Module_test.mk b/test/Module_test.mk +index e1051f16b5a0..d1787cb5789b 100644 +--- a/test/Module_test.mk ++++ b/test/Module_test.mk +@@ -11,6 +11,7 @@ $(eval $(call gb_Module_Module,test)) + + ifneq (,$(filter DESKTOP,$(BUILD_TYPE))) + ++ifeq ($(ENABLE_CPPUNIT),TRUE) + $(eval $(call gb_Module_add_targets,test,\ + Library_test \ + Library_test_setupvcl \ +@@ -18,6 +19,7 @@ $(eval $(call gb_Module_add_targets,test,\ + $(eval $(call gb_Module_add_check_targets,test,\ + CppunitTest_test_xpath \ + )) ++endif + + endif + +diff --git a/unotest/Module_unotest.mk b/unotest/Module_unotest.mk +index a47ca5d4b694..e243e06309f5 100644 +--- a/unotest/Module_unotest.mk ++++ b/unotest/Module_unotest.mk +@@ -11,12 +11,15 @@ + $(eval $(call gb_Module_Module,unotest)) + + ifneq (,$(filter DESKTOP,$(BUILD_TYPE))) ++ ++ifeq ($(ENABLE_CPPUNIT),TRUE) + $(eval $(call gb_Module_add_targets,unotest,\ + Library_unobootstrapprotector \ + Library_unoexceptionprotector \ + Library_unotest \ + )) + endif ++endif + + ifneq ($(ENABLE_JAVA),) + $(eval $(call gb_Module_add_targets,unotest,\ +diff --git a/testtools/Module_testtools.mk b/testtools/Module_testtools.mk +index a1b84e175b30..08e4aad24c11 100644 +--- a/testtools/Module_testtools.mk ++++ b/testtools/Module_testtools.mk +@@ -11,6 +11,8 @@ $(eval $(call gb_Module_Module,testtools)) + + ifeq ($(CROSS_COMPILING),) + ++ifeq ($(ENABLE_CPPUNIT),TRUE) ++ + $(eval $(call gb_Module_add_targets,testtools,\ + CustomTarget_bridgetest \ + InternalUnoApi_bridgetest \ +@@ -41,4 +43,6 @@ $(eval $(call gb_Module_add_check_targets,testtools,\ + + endif + ++endif ++ + # vim:set noet sw=4 ts=4: diff --git a/debian/patches/debian-debug.diff b/debian/patches/debian-debug.diff new file mode 100644 index 00000000000..77070f6f793 --- /dev/null +++ b/debian/patches/debian-debug.diff @@ -0,0 +1,47 @@ +diff --git a/solenv/gbuild/platform/com_GCC_defs.mk b/solenv/gbuild/platform/com_GCC_defs.mk +index 9de88a2..9161a4e 100644 +--- a/solenv/gbuild/platform/com_GCC_defs.mk ++++ b/solenv/gbuild/platform/com_GCC_defs.mk +@@ -170,6 +170,8 @@ gb_COMPILERNOOPTFLAGS := -O0 -fstrict-aliasing -fstrict-overflow + ifeq ($(OS),ANDROID) + gb_DEBUGINFO_FLAGS=-glldb + # Clang does not know -ggdb2 or some other options ++else ifeq ($(enable_symbols),SMALL) ++gb_DEBUGINFO_FLAGS=-g1 + else ifeq ($(HAVE_GCC_GGDB2),TRUE) + gb_DEBUGINFO_FLAGS=-ggdb2 + else +diff --git a/configure.ac b/configure.ac +index 2d62af9981a9..b1ad5a970700 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -4056,6 +4056,9 @@ fi + if test "$enable_symbols" = yes; then + ENABLE_SYMBOLS_FOR=all + AC_MSG_RESULT([yes]) ++elif test "$enable_symbols" = "SMALL" -o "$enable_symbols" = "small"; then ++ ENABLE_SYMBOLS_FOR=all ++ AC_MSG_RESULT([yes, small ones]) + elif test "$enable_symbols" = no; then + ENABLE_SYMBOLS_FOR= + AC_MSG_RESULT([no]) +@@ -4064,6 +4067,7 @@ else + ENABLE_SYMBOLS_FOR="$enable_symbols" + AC_MSG_RESULT([for "$enable_symbols"]) + fi ++AC_SUBST(enable_symbols) + AC_SUBST(ENABLE_SYMBOLS_FOR) + + if test -n "$with_android_ndk" -a \( -n "$ENABLE_SYMBOLS" -o -n "$ENABLE_DEBUG" -o -n "$ENABLE_DBGUTIL" \) -a "$ENABLE_DEBUGINFO_FOR" = "all"; then +diff --git a/config_host.mk.in b/config_host.mk.in +index 7df26713a1dd..174c4e50466c 100644 +--- a/config_host.mk.in ++++ b/config_host.mk.in +@@ -208,6 +209,7 @@ export ENABLE_SDREMOTE_BLUETOOTH=@ENABLE_SDREMOTE_BLUETOOTH@ + export ENABLE_SILENT_MSI=@ENABLE_SILENT_MSI@ + export ENABLE_SKIA=@ENABLE_SKIA@ + export ENABLE_SKIA_DEBUG=@ENABLE_SKIA_DEBUG@ ++export enable_symbols=@enable_symbols@ + export ENABLE_SYMBOLS_FOR=@ENABLE_SYMBOLS_FOR@ + export ENABLE_VALGRIND=@ENABLE_VALGRIND@ + export ENABLE_VLC=@ENABLE_VLC@ diff --git a/debian/patches/debian-hardened-buildflags-CPPFLAGS.diff b/debian/patches/debian-hardened-buildflags-CPPFLAGS.diff new file mode 100644 index 00000000000..36394f3af05 --- /dev/null +++ b/debian/patches/debian-hardened-buildflags-CPPFLAGS.diff @@ -0,0 +1,37 @@ +--- a/configure.ac-old 2012-03-02 21:48:47.000000000 +0000 ++++ b/configure.ac 2012-03-02 21:51:29.000000000 +0000 +@@ -10225,6 +10225,11 @@ else + fi + AC_SUBST(ENABLE_VLC) + ++if test -x /usr/bin/dpkg-buildflags; then ++ HARDEN_CPPFLAGS=`dpkg-buildflags --get CPPFLAGS 2>/dev/null` ++fi ++AC_SUBST(HARDEN_CPPFLAGS) ++ + ENABLE_OPENGL_TRANSITIONS= + ENABLE_OPENGL_CANVAS= + if test $_os = iOS -o $_os = Android -o "$ENABLE_FUZZERS" = "TRUE"; then +--- a/config_host.mk.in-old 2012-04-06 14:17:55.164239390 +0200 ++++ b/config_host.mk.in 2012-04-06 14:18:55.440239065 +0200 +@@ -76,6 +76,7 @@ + export CPPUNIT_LIBS=$(gb_SPACE)@CPPUNIT_LIBS@ + export CPUNAME=@CPUNAME@ + export CDEFAULTOPT=@CDEFAULTOPT@ ++export HARDEN_CPPFLAGS=@HARDEN_CPPFLAGS@ + export CROSS_COMPILING=@CROSS_COMPILING@ + export CURL=@CURL@ + export CURL_CFLAGS=$(gb_SPACE)@CURL_CFLAGS@ +diff --git a/solenv/gbuild/gbuild.mk b/solenv/gbuild/gbuild.mk +index c71cb40..f826d65 100644 +--- a/solenv/gbuild/gbuild.mk ++++ b/solenv/gbuild/gbuild.mk +@@ -259,6 +259,8 @@ gb_GLOBALDEFS += \ + ENABLE_LTO \ + ) + ++gb_GLOBALDEFS += $(HARDEN_CPPFLAGS) ++ + gb_GLOBALDEFS := $(sort $(gb_GLOBALDEFS)) + + # Common environment variables passed into all gb_*Test classes: diff --git a/debian/patches/debian-hardened-buildflags-no-LO-fstack-protector-strong.diff b/debian/patches/debian-hardened-buildflags-no-LO-fstack-protector-strong.diff new file mode 100644 index 00000000000..e9c49efd608 --- /dev/null +++ b/debian/patches/debian-hardened-buildflags-no-LO-fstack-protector-strong.diff @@ -0,0 +1,32 @@ +don't hardcode -fstack-protector-strong in configure.ac/gbuild. We get the +hardening flags from dpkg-buildflags anyway. + +diff --git a/solenv/gbuild/platform/com_GCC_defs.mk b/solenv/gbuild/platform/com_GCC_defs.mk +index 712a61df544f..0d50f538ba7b 100644 +--- a/solenv/gbuild/platform/com_GCC_defs.mk ++++ b/solenv/gbuild/platform/com_GCC_defs.mk +@@ -67,7 +67,6 @@ gb_CFLAGS_COMMON := \ + -fmessage-length=0 \ + -fno-common \ + -pipe \ +- -fstack-protector-strong \ + $(if $(gb_COLOR),-fdiagnostics-color=always) \ + + gb_CXXFLAGS_COMMON := \ +@@ -82,7 +81,6 @@ gb_CXXFLAGS_COMMON := \ + -fmessage-length=0 \ + -fno-common \ + -pipe \ +- -fstack-protector-strong \ + $(if $(gb_COLOR),-fdiagnostics-color=always) \ + + ifeq ($(HAVE_WDEPRECATED_COPY_DTOR),TRUE) +@@ -136,8 +134,6 @@ endif + gb_VISIBILITY_FLAGS_CXX := -fvisibility-inlines-hidden + gb_CXXFLAGS_COMMON += $(gb_VISIBILITY_FLAGS_CXX) + +-gb_LinkTarget_LDFLAGS += -fstack-protector-strong +- + ifneq ($(gb_ENABLE_PCH),) + ifeq ($(COM_IS_CLANG),TRUE) + # Clang by default includes in the PCH timestamps of the files it was diff --git a/debian/patches/debian-opt.diff b/debian/patches/debian-opt.diff new file mode 100644 index 00000000000..96784e674cf --- /dev/null +++ b/debian/patches/debian-opt.diff @@ -0,0 +1,26 @@ +diff --git a/configure.ac b/configure.ac +index f06ef8e..91ce612 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -12776,6 +12776,9 @@ fi + fi + fi + ++CDEFAULTOPT=`echo $CFLAGS 2>/dev/null | grep -E -o "\-O[[0-3]]"` ++AC_SUBST(CDEFAULTOPT) ++ + dnl =================================================================== + dnl Setting up the environment. + dnl =================================================================== +diff --git a/config_host.mk.in b/config_host.mk.in +index 1ec3268..abb45b1 100644 +--- a/config_host.mk.in ++++ b/config_host.mk.in +@@ -69,6 +69,7 @@ export CPP_LIBRARY=@CPP_LIBRARY@ + export CPPUNIT_CFLAGS=$(gb_SPACE)@CPPUNIT_CFLAGS@ + export CPPUNIT_LIBS=$(gb_SPACE)@CPPUNIT_LIBS@ + export CPUNAME=@CPUNAME@ ++export CDEFAULTOPT=@CDEFAULTOPT@ + export CROSS_COMPILING=@CROSS_COMPILING@ + export CURL=@CURL@ + export CURL_CFLAGS=$(gb_SPACE)@CURL_CFLAGS@ diff --git a/debian/patches/default-to-CertificateValidity::INVALID.diff b/debian/patches/default-to-CertificateValidity::INVALID.diff new file mode 100644 index 00000000000..a17847efc8b --- /dev/null +++ b/debian/patches/default-to-CertificateValidity::INVALID.diff @@ -0,0 +1,52 @@ +From edeb164c1d8ab64116afee4e2140403a362a1358 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Mon, 8 Feb 2021 17:05:28 +0000 +Subject: default to CertificateValidity::INVALID + +so if CertGetCertificateChain fails we don't want validity to be +css::security::CertificateValidity::VALID which is what the old default +of 0 equates to + +notably + +commit 1e0bc66d16aee28ce8bd9582ea32178c63841902 +Date: Thu Nov 5 16:55:26 2009 +0100 + + jl137: #103420# better logging + +turned the nss equivalent of SecurityEnvironment_NssImpl::verifyCertificate +from 0 to CertificateValidity::INVALID like this change does + +Change-Id: I5350dbc22d1b9b378da2976d3b0abd728f1f4c27 +Reviewed-on: https://gerrit.libreoffice.org/c/core/+/110561 +Tested-by: Jenkins +Reviewed-by: Miklos Vajna +--- + xmlsecurity/source/xmlsec/mscrypt/securityenvironment_mscryptimpl.cxx | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/xmlsecurity/source/xmlsec/mscrypt/securityenvironment_mscryptimpl.cxx b/xmlsecurity/source/xmlsec/mscrypt/securityenvironment_mscryptimpl.cxx +index 01b27fb9756f..0ac0d6216c96 100644 +--- a/xmlsecurity/source/xmlsec/mscrypt/securityenvironment_mscryptimpl.cxx ++++ b/xmlsecurity/source/xmlsec/mscrypt/securityenvironment_mscryptimpl.cxx +@@ -753,7 +753,7 @@ sal_Int32 SecurityEnvironment_MSCryptImpl::verifyCertificate( + const uno::Reference< css::security::XCertificate >& aCert, + const uno::Sequence< uno::Reference< css::security::XCertificate > >& seqCerts) + { +- sal_Int32 validity = 0; ++ sal_Int32 validity = css::security::CertificateValidity::INVALID; + PCCERT_CHAIN_CONTEXT pChainContext = nullptr; + PCCERT_CONTEXT pCertContext = nullptr; + +@@ -897,7 +897,7 @@ sal_Int32 SecurityEnvironment_MSCryptImpl::verifyCertificate( + } + else + { +- SAL_INFO("xmlsecurity.xmlsec", "CertGetCertificateChaine failed."); ++ SAL_INFO("xmlsecurity.xmlsec", "CertGetCertificateChain failed."); + } + } + +-- +cgit v1.2.1 + diff --git a/debian/patches/disable-flaky-tests.diff b/debian/patches/disable-flaky-tests.diff new file mode 100644 index 00000000000..5e0ab1213fb --- /dev/null +++ b/debian/patches/disable-flaky-tests.diff @@ -0,0 +1,141 @@ +14:13 < mst__> _rene_, the toolkit unoapi tests are known to be flaky (in some + system dependent way) e.g. on the Win@6 tinderbox it always + crashes +14:14 < mst__> _rene_, sc.ScAccessible* tests also fail on some systems some of + the time + +diff --git a/toolkit/Module_toolkit.mk b/toolkit/Module_toolkit.mk +index 25db0b6..14e507c 100644 +--- a/toolkit/Module_toolkit.mk ++++ b/toolkit/Module_toolkit.mk +@@ -26,11 +26,11 @@ $(eval $(call gb_Module_add_targets,toolkit,\ + ifneq ($(OOO_JUNIT_JAR),) + $(eval $(call gb_Module_add_subsequentcheck_targets,toolkit,\ + JunitTest_toolkit_complex \ +- JunitTest_toolkit_unoapi_1 \ +- JunitTest_toolkit_unoapi_2 \ +- JunitTest_toolkit_unoapi_3 \ +- JunitTest_toolkit_unoapi_4 \ + )) + endif ++# JunitTest_toolkit_unoapi_1 \ ++# JunitTest_toolkit_unoapi_2 \ ++# JunitTest_toolkit_unoapi_3 \ ++# JunitTest_toolkit_unoapi_4 \ + + # vim: set noet sw=4 ts=4: +diff --git a/sc/qa/unoapi/sc_1.sce b/sc/qa/unoapi/sc_1.sce +index fa1684c..cc8e1a5 100644 +--- a/sc/qa/unoapi/sc_1.sce ++++ b/sc/qa/unoapi/sc_1.sce +@@ -24,10 +24,3 @@ + # i84554 -o sc.AccessibleEditableTextPara_PreviewNote + # i88241 -o sc.AccessibleEditableTextPara_HeaderFooter + -o sc.AccessibleEditableTextPara_PreviewCell +--o sc.ScAccessibleCell +-# i91044 -o sc.ScAccessibleCsvCell +-# i91044 -o sc.ScAccessibleCsvGrid +-# i84641 -o sc.ScAccessibleCsvRuler +-# i88330 -o sc.ScAccessibleDocument +-# i91045 -o sc.ScAccessibleDocumentPagePreview +--o sc.ScAccessiblePageHeader +diff --git a/sc/qa/unoapi/sc_2.sce b/sc/qa/unoapi/sc_2.sce +index dbfc3e1..d235c5d 100644 +--- a/sc/qa/unoapi/sc_2.sce ++++ b/sc/qa/unoapi/sc_2.sce +@@ -15,11 +15,6 @@ + # except in compliance with the License. You may obtain a copy of + # the License at http://www.apache.org/licenses/LICENSE-2.0 . + # +-# fdo#FOO -o sc.ScAccessiblePageHeaderArea +--o sc.ScAccessiblePreviewCell +--o sc.ScAccessiblePreviewHeaderCell +--o sc.ScAccessiblePreviewTable +-# fdo#45337 -o sc.ScAccessibleSpreadsheet + # FIXME_REMOVE_WHEN_RE_BASE_COMPLETE + # -o sc.ScAnnotationShapeObj + -o sc.ScAutoFormatFieldObj + +diff --git a/svx/qa/unoapi/svx.sce b/svx/qa/unoapi/svx.sce +index 1c3925f..a16f001 100644 +--- a/svx/qa/unoapi/svx.sce ++++ b/svx/qa/unoapi/svx.sce +@@ -25,7 +25,7 @@ + #i111216 -o svx.AccessiblePresentationGraphicShape + #i111216 -o svx.AccessiblePresentationOLEShape + #i85539 -o svx.AccessiblePresentationShape +--o svx.AccessibleShape ++#-o svx.AccessibleShape + #i90294 -o svx.GraphicExporter + -o svx.SvxDrawPage + #i85501 -o svx.SvxGraphCtrlAccessibleContext + +19:26 <@x1sc0> _rene_, since that test is using exact dimensions, it seems it + fails on your side probably because the paragraph style is + different. 1. I will change the test to avoid the exact + dimensions. 2. meantime you can skip that test: +https://cgit.freedesktop.org/libreoffice/core/commit/?id=e05f16e6bf36efbaab16dd2ed1427a750ce7cafd +19:26 < IZBot> core - disable UI test that does exact comparison +19:27 < _rene_> mmh, ok, saw that but that was for a different test, so.. :) +19:27 -!- jacobo [~jaragunde@fanzine.igalia.com] has quit [Quit: Leaving.] +19:27 < _rene_> thanks, will do + +diff --git a/uitest/writer_tests/tdf79236.py b/uitest/writer_tests/tdf79236.py +index 8585e48d8c64..704f42c009a1 100644 +--- a/uitest/writer_tests8/tdf79236.py ++++ b/uitest/writer_tests8/tdf79236.py +@@ -8,8 +8,11 @@ from uitest.framework import UITestCase + import time + from uitest.uihelper.common import get_state_as_dict, type_text + ++import unittest ++ + class tdf79236(UITestCase): + ++ @unittest.skip("Currently broken") + def test_paragraph(self): + + self.ui_test.create_doc_in_start_center("writer") + +14:39 < ztamas> _rene_: chart2dump is used to fail because of font size differences, just use a bigger delta or disable it if it + fails for you. +14:40 <@sberg_> noelgrandin, no +14:40 < noelgrandin> sberg_, sure seems that way both in the debugger and in the resulting SAL_WARN output +14:42 < ztamas> _rene_: there were some work on making font rendering consistent on different platforms, but it's not finished + yet, I guess +diff --git a/chart2/Module_chart2.mk b/chart2/Module_chart2.mk +index 37acfdc3730f..7d26342f179f 100644 +--- a/chart2/Module_chart2.mk ++++ b/chart2/Module_chart2.mk +@@ -28,10 +28,10 @@ $(eval $(call gb_Module_add_slowcheck_targets,chart2,\ + CppunitTest_chart2_export \ + CppunitTest_chart2_import \ + CppunitTest_chart2_trendcalculators \ +- CppunitTest_chart2_dump \ + CppunitTest_chart2_pivot_chart_test \ + CppunitTest_chart2_geometry \ + )) ++# CppunitTest_chart2_dump \ + + ifeq ($(ENABLE_CHART_TESTS),TRUE) + ifeq ($(WITH_FONTS), TRUE) +diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport2.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport2.cxx +index d75a8c0dc4fe..e768da479823 100644 +--- a/sw/qa/extras/ooxmlimport/ooxmlimport2.cxx ++++ b/sw/qa/extras/ooxmlimport/ooxmlimport2.cxx +@@ -312,13 +312,13 @@ DECLARE_OOXMLIMPORT_TEST(testTextCopy, "text-copy.docx") + CPPUNIT_ASSERT(xHeaderShapes->hasMoreElements()); + } + +-DECLARE_OOXMLIMPORT_TEST(testTdf112443, "tdf112443.docx") ++/*DECLARE_OOXMLIMPORT_TEST(testTdf112443, "tdf112443.docx") + { + // the position of the flying text frame should be off page + // 30624 below its anchor + OUString aTop = parseDump("//fly[1]/infos/bounds", "top"); + CPPUNIT_ASSERT_EQUAL(OUString("30624"), aTop); +-} ++}*/ + + // DOCX: Textbox wrap differs in MSO and LO + // Both should layout text regardless of existing text box diff --git a/debian/patches/disable-java-in-odk-build-examples-on-zero-vm.diff b/debian/patches/disable-java-in-odk-build-examples-on-zero-vm.diff new file mode 100644 index 00000000000..1935360924b --- /dev/null +++ b/debian/patches/disable-java-in-odk-build-examples-on-zero-vm.diff @@ -0,0 +1,58 @@ +diff --git a/config_host.mk.in b/config_host.mk.in +index 8cbbc5fee1d5..40e37643a0ea 100644 +--- a/config_host.mk.in ++++ b/config_host.mk.in +@@ -282,6 +282,7 @@ export JAVAFLAGS=@JAVAFLAGS@ + export JAVAIFLAGS=@JAVAIFLAGS@ + export JAVA_CLASSPATH_NOT_SET=@JAVA_CLASSPATH_NOT_SET@ + export JAVAINTERPRETER=@JAVAINTERPRETER@ ++export JAVA_HAS_ZERO_VM=@JAVA_HAS_ZERO_VM@ + export JAVA_HOME=@JAVA_HOME@ + export JAVA_SOURCE_VER=@JAVA_SOURCE_VER@ + export JAVA_TARGET_VER=@JAVA_TARGET_VER@ +diff --git a/configure.ac b/configure.ac +index e6bfb13ebab8..3b7f0a2e1121 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -6675,6 +6675,14 @@ you must use the "--with-jdk-home" configure option explicitly]) + JAVAIFLAGS=-Xmx64M + # set to limit VM usage for javac + JAVAFLAGS=-J-Xmx128M ++ ++ AC_MSG_CHECKING([whether $JAVAINTERPRETER is using the Zero VM]) ++ if $JAVAINTERPRETER -version 2>&1 | grep -q Zero; then ++ JAVA_HAS_ZERO_VM=y ++ AC_MSG_RESULT([yes]) ++ else ++ AC_MSG_RESULT([no]) ++ fi + fi + else + AC_MSG_ERROR([Java not found. You need at least JDK 9]) +@@ -6684,6 +6689,7 @@ else + JAVA_HOME= + export JAVA_HOME + fi ++AC_SUBST(JAVA_HAS_ZERO_VM) + + dnl =================================================================== + dnl Checks for javac +diff --git a/odk/Module_odk.mk b/odk/Module_odk.mk +index 410f8cf8ef1e..bd05d4bba200 100644 +--- a/odk/Module_odk.mk ++++ b/odk/Module_odk.mk +@@ -60,10 +62,14 @@ $(eval $(call gb_Module_add_check_targets,odk,\ + ifneq ($(filter $(OS),LINUX MACOSX),) + $(eval $(call gb_Module_add_subsequentcheck_targets,odk, \ + CustomTarget_build-examples \ ++)) ++ifneq ($(JAVA_HAS_ZERO_VM),y) ++$(eval $(call gb_Module_add_subsequentcheck_targets,odk, \ + $(if $(ENABLE_JAVA),\ + CustomTarget_build-examples_java \ + ) \ + )) + endif ++endif + + # vim: set noet sw=4 ts=4: diff --git a/debian/patches/disable-shortcuts_tab_navigation-uitest.diff b/debian/patches/disable-shortcuts_tab_navigation-uitest.diff new file mode 100644 index 00000000000..49a2b7487ef --- /dev/null +++ b/debian/patches/disable-shortcuts_tab_navigation-uitest.diff @@ -0,0 +1,49 @@ +diff --git a/cui/qa/uitest/dialogs/shortcuts.py b/cui/qa/uitest/dialogs/shortcuts.py +deleted file mode 100644 +index 8a52ee42315a..000000000000 +--- a/cui/qa/uitest/dialogs/shortcuts.py ++++ /dev/null +@@ -1,43 +0,0 @@ +-# -*- tab-width: 4; indent-tabs-mode: nil; py-indent-offset: 4 -*- +-# +-# This Source Code Form is subject to the terms of the Mozilla Public +-# License, v. 2.0. If a copy of the MPL was not distributed with this +-# file, You can obtain one at http://mozilla.org/MPL/2.0/. +-# +- +-from uitest.framework import UITestCase +-from uitest.uihelper.common import select_pos +-from libreoffice.uno.propertyvalue import mkPropertyValues +-from uitest.uihelper.common import get_state_as_dict +- +-class Test(UITestCase): +- +- def test_tab_navigation(self): +- self.ui_test.create_doc_in_start_center("writer") +- xWriterDoc = self.xUITest.getTopFocusWindow() +- xWriterEdit = xWriterDoc.getChild("writer_edit") +- +- self.ui_test.execute_dialog_through_command(".uno:EditStyle") #open style dialog +- xDialog = self.xUITest.getTopFocusWindow() +- +- xTabs = xDialog.getChild("tabcontrol") +- select_pos(xTabs, "0") +- +- for i in range(16): +- self.assertEqual(get_state_as_dict(xTabs)["CurrPagePos"], str(i)) +- +- xTabs.executeAction("TYPE", mkPropertyValues({"KEYCODE":"CTRL+PAGEDOWN"})) +- +- self.assertEqual(get_state_as_dict(xTabs)["CurrPagePos"], "0") +- +- for i in reversed(range(16)): +- xTabs.executeAction("TYPE", mkPropertyValues({"KEYCODE":"CTRL+PAGEUP"})) +- +- self.assertEqual(get_state_as_dict(xTabs)["CurrPagePos"], str(i)) +- +- xOkBtn = xDialog.getChild("ok") +- xOkBtn.executeAction("CLICK", tuple()) +- +- self.ui_test.close_doc() +- +-# vim: set shiftwidth=4 softtabstop=4 expandtab: diff --git a/debian/patches/disable-unused-test-programs.diff b/debian/patches/disable-unused-test-programs.diff new file mode 100644 index 00000000000..c1402c61565 --- /dev/null +++ b/debian/patches/disable-unused-test-programs.diff @@ -0,0 +1,70 @@ +diff --git a/vcl/Module_vcl.mk b/vcl/Module_vcl.mk +index a5e4bf5d68d2..3e9e1bf9fe27 100644 +--- a/vcl/Module_vcl.mk ++++ b/vcl/Module_vcl.mk +@@ -28,28 +28,9 @@ $(eval $(call gb_Module_add_targets,vcl,\ + StaticLibrary_vclmain \ + $(if $(ENABLE_MACOSX_SANDBOX),, \ + $(if $(DISABLE_GUI),, \ +- Executable_ui-previewer)) \ +- $(if $(filter LINUX MACOSX SOLARIS WNT %BSD,$(OS)), \ +- Executable_outdevgrind \ +- $(if $(DISABLE_GUI),, \ +- Executable_vcldemo \ +- Executable_icontest \ +- Executable_visualbackendtest \ +- Executable_mtfdemo ))) \ ++ Executable_ui-previewer))) \ + )) + +-ifeq ($(CROSS_COMPILING)$(DISABLE_DYNLOADING),) +- +-$(eval $(call gb_Module_add_targets,vcl,\ +- $(if $(filter-out ANDROID iOS WNT,$(OS)), \ +- Executable_svdemo \ +- Executable_fftester \ +- Executable_svptest \ +- Executable_svpclient) \ +-)) +- +-endif +- + $(eval $(call gb_Module_add_l10n_targets,vcl,\ + AllLangMoTarget_vcl \ + )) +diff --git a/xmlsecurity/Module_xmlsecurity.mk b/xmlsecurity/Module_xmlsecurity.mk +index d3fafeb7e4ec..87b8c067903e 100644 +--- a/xmlsecurity/Module_xmlsecurity.mk ++++ b/xmlsecurity/Module_xmlsecurity.mk +@@ -45,14 +45,6 @@ $(eval $(call gb_Module_add_screenshot_targets,xmlsecurity,\ + CppunitTest_xmlsecurity_dialogs_test \ + )) + +-ifneq (,$(filter DESKTOP,$(BUILD_TYPE))) +- +-$(eval $(call gb_Module_add_targets,xmlsecurity,\ +- Executable_pdfverify \ +-)) +- +-endif +- + endif + + # vim: set noet sw=4 ts=4: +diff --git a/libreofficekit/Module_libreofficekit.mk b/libreofficekit/Module_libreofficekit.mk +index 351f89a33e48..defe0b14a681 100644 +--- a/libreofficekit/Module_libreofficekit.mk ++++ b/libreofficekit/Module_libreofficekit.mk +@@ -23,12 +23,10 @@ $(eval $(call gb_Module_add_check_targets,libreofficekit, \ + ifneq ($(ENABLE_GTK3),) + $(eval $(call gb_Module_add_targets,libreofficekit,\ + Library_libreofficekitgtk \ +- Executable_gtktiledviewer \ + )) + endif # ($(ENABLE_GTK3),) + + $(eval $(call gb_Module_add_targets,libreofficekit,\ +- Executable_tilebench \ + Package_selectionhandles \ + UIConfig_libreofficekit \ + )) diff --git a/debian/patches/disableClassPathURLCheck.diff b/debian/patches/disableClassPathURLCheck.diff new file mode 100644 index 00000000000..65c70712602 --- /dev/null +++ b/debian/patches/disableClassPathURLCheck.diff @@ -0,0 +1,10 @@ +--- a/configure.ac-old 2018-11-12 06:51:15.504128408 +0100 ++++ b/configure.ac 2018-11-12 06:52:32.427358015 +0100 +@@ -6898,6 +6898,7 @@ + + # set to limit VM usage for JunitTests + JAVAIFLAGS=-Xmx64M ++ JAVAIFLAGS="$JAVAIFLAGS -Djdk.net.URLClassPath.disableClassPathURLCheck=true" + # set to limit VM usage for javac + JAVAFLAGS=-J-Xmx128M + diff --git a/debian/patches/do-not-hide-test-output.diff b/debian/patches/do-not-hide-test-output.diff new file mode 100644 index 00000000000..37204149cd5 --- /dev/null +++ b/debian/patches/do-not-hide-test-output.diff @@ -0,0 +1,99 @@ +diff --git a/odk/build-examples_common.mk b/odk/build-examples_common.mk +index abcb3a3e2593..35d45ad23413 100644 +--- a/odk/build-examples_common.mk ++++ b/odk/build-examples_common.mk +@@ -49,12 +49,7 @@ else + && printf 'yes\n' | LC_ALL=C make \ + CC="$(CXX)" LINK="$(CXX)" LIB="$(CXX)" \ + $(if $(MACOSX_SHELL_HACK), SHELL="$$$$ODK_BUILD_SHELL", ))) \ +- $(if $(MACOSX_SHELL_HACK),&& rm -f "$$$$ODK_BUILD_SHELL")) \ +- >$(call gb_CustomTarget_get_workdir,$(1))/log 2>&1 \ +- || (RET=$$$$? \ +- $(if $(MACOSX_SHELL_HACK), && rm -f "$$$$ODK_BUILD_SHELL" , ) \ +- && cat $(call gb_CustomTarget_get_workdir,$(1))/log \ +- && exit $$$$RET) ++ 2>&1 ) + endif + + $(call gb_CustomTarget_get_workdir,$(1))/setsdkenv: \ +diff --git a/solenv/gbuild/CppunitTest.mk b/solenv/gbuild/CppunitTest.mk +index 45af5c9b25a7..7933fc84c8b2 100644 +--- a/solenv/gbuild/CppunitTest.mk ++++ b/solenv/gbuild/CppunitTest.mk +@@ -139,12 +139,7 @@ else + ; RET=$$? && $(gb_CppunitTest_POSTGDBTRACE) && (exit $$RET)) \ + $(if $(gb_CppunitTest_localized),|| exit $$?; done) \ + ) \ +- $(if $(gb_CppunitTest__interactive),, \ +- > $@.log 2>&1 \ +- || ($(if $(value gb_CppunitTest_postprocess), \ +- RET=$$?; \ +- $(call gb_CppunitTest_postprocess,$(gb_CppunitTest_CPPTESTCOMMAND),$@.core,$$RET) >> $@.log 2>&1;) \ +- cat $@.log; $(gb_CppunitTest_UNITTESTFAILED) Cppunit $*))) ++ 2>&1) + $(call gb_Trace_EndRange,$*,CUT) + endif + +diff --git a/solenv/gbuild/JunitTest.mk b/solenv/gbuild/JunitTest.mk +index 36f29b50ef28..3ac4603ff6a0 100644 +--- a/solenv/gbuild/JunitTest.mk ++++ b/solenv/gbuild/JunitTest.mk +@@ -44,17 +44,7 @@ else + -classpath "$(T_CP)" \ + $(DEFS) \ + org.junit.runner.JUnitCore \ +- $(CLASSES) > $@.log 2>&1 || \ +- (cat $@.log \ +- && echo "to rerun just this failed test without all others, run:" \ +- && echo && echo " make JunitTest_$*" && echo \ +- && echo "cd into the module dir to run the tests faster" \ +- && echo "Or to do interactive debugging, run two shells with:" \ +- && echo \ +- && echo " make debugrun" \ +- && echo " make gb_JunitTest_DEBUGRUN=T JunitTest_$*" \ +- && echo \ +- && false))) ++ $(CLASSES) 2>&1)) + $(CLEAN_CMD) + $(call gb_Trace_EndRange,$*,JUT) + endif +diff --git a/solenv/gbuild/UITest.mk b/solenv/gbuild/UITest.mk +index 03d30448ef7b..5628e47866f8 100644 +--- a/solenv/gbuild/UITest.mk ++++ b/solenv/gbuild/UITest.mk +@@ -77,16 +77,7 @@ else + --userdir=$(call gb_Helper_make_url,$(dir $(call gb_UITest_get_target,$*))user) \ + --dir=$(strip $(MODULES)) \ + $(gb_UITest_GDBTRACE) \ +- $(if $(gb_UITest__interactive),, \ +- > $@.log 2>&1 \ +- || ($(if $(value gb_CppunitTest_postprocess), \ +- RET=$$?; \ +- $(call gb_CppunitTest_postprocess,$(gb_UITest_EXECUTABLE_GDB),$@.core,$$RET) >> $@.log 2>&1;) \ +- $(if $(filter WNT,$(OS)), \ +- printf '%s: <<<\n' $(dir $(call gb_UITest_get_target,$*))/soffice.out.log; \ +- cat $(dir $(call gb_UITest_get_target,$*))/soffice.out.log; \ +- printf ' >>>\n\n';) \ +- cat $@.log; $(gb_UITest_UNITTESTFAILED) UI $*)))) ++ 2>&1)) + $(call gb_Trace_EndRange,$*,UIT) + endif + +diff --git a/solenv/gbuild/PythonTest.mk b/solenv/gbuild/PythonTest.mk +index 9b0590e35d2a..3a1d7d9caceb 100644 +--- a/solenv/gbuild/PythonTest.mk ++++ b/solenv/gbuild/PythonTest.mk +@@ -58,12 +58,7 @@ else + $(ICECREAM_RUN) $(gb_CppunitTest_GDBTRACE) $(gb_CppunitTest_VALGRINDTOOL) $(gb_CppunitTest_RR) \ + $(gb_PythonTest_COMMAND) \ + $(if $(PYTHON_TEST_NAME),$(PYTHON_TEST_NAME),$(MODULES)) \ +- $(if $(gb_CppunitTest__interactive),, \ +- > $@.log 2>&1 \ +- || ($(if $(value gb_CppunitTest_postprocess), \ +- RET=$$?; \ +- $(call gb_CppunitTest_postprocess,$(gb_PythonTest_EXECUTABLE_GDB),$@.core,$$RET) >> $@.log 2>&1;) \ +- cat $@.log; $(gb_PythonTest_UNITTESTFAILED) Python $*)))) ++ 2>&1)) + $(call gb_Trace_EndRange,$*,PYT) + endif + diff --git a/debian/patches/dont-touch-urd.diff b/debian/patches/dont-touch-urd.diff new file mode 100644 index 00000000000..f19ef5dc217 --- /dev/null +++ b/debian/patches/dont-touch-urd.diff @@ -0,0 +1,80 @@ +18:43 <@_rene_> hmm. /me wonders why after a rm config.status autogen.lastrun + and a re-configure (and make clean for odk/scp2/scripting) LO + master tries to rebuild offapi/udkapi again? +18:44 <@_rene_> this a) takes with cpp instead of ucpp and b) causes all kind + of stuff "down" to be rebuilt.... :( +18:44 <@_rene_> which is extremely bad. +18:44 <@_rene_> if it isn't solvable easily: what to touch to prevent it from + doing that? :-) +18:45 < loirkerbot> LibreOffice (core) mstahl * desktop/source/app/main.c: + desktop: tweak xmlCleanupParser hack: disable on return + from main +18:46 < mst__> _rene_, did you switch between --with-system-ucpp and without? + that should rebuild IDL file... +18:47 <@_rene_> nah, first run is just --disable-help, --disable-scripting etc +18:47 <@_rene_> and the second run does that +18:47 <@_rene_> (first pass to "just" build what is needed for arch-specific + stuff) +18:48 <@_rene_> (and I am not using ucpp at all, but cpp ;)) +18:51 < mst__> _rene_, hmm don't know why that would happen then... you could + try running second make with -d and redirect to a file, but + beware that file will be huge... then grep for "Must + remake.*urd" or something should give you the problem area +18:59 -!- reisi007 [~chatzilla@cpe90-146-226-33.liwest.at] has quit [Quit: + ChatZilla 0.9.89 [Firefox 14.0.1/20120713134347]] +19:00 -!- crossmanith_ [~cr@p3E9EAEF6.dip.t-dialin.net] has joined + #libreoffice-dev +19:00 -!- erAck_away is now known as erAck +19:05 -!- cbosdonnat [~cbosdo@ALyon-651-1-309-127.w90-14.abo.wanadoo.fr] has + quit [Quit: Leaving] +19:07 <@_rene_> mst__: ok, starting a new build, let's see +[...] +10:36 <@_rene_> mst__: nothing interesting there instead of the loads of + touch'es... +10:36 <@_rene_> mst__: butI just removed the touch from the UnoApiTarget and + let's see now :) +10:36 -!- erAck [~erathke@f054050047.adsl.alicedsl.de] has joined + #libreoffice-dev +10:36 -!- mode/#libreoffice-dev [+o erAck] by ChanServ +10:36 <@_rene_> $(call gb_UnoApiPartTarget_get_target,%.urd) : +10:36 <@_rene_> - touch $@ +10:36 <@_rene_> + +[...] +10:38 < mst__> _rene_, there must be something interesting there: preceding the + "Must remake.*urd" line there must be some line that says target + "foo" is "newer" than the .urd and therefor it will be rebuilt +[...] +10:40 <@_rene_> mst__: I didn't see anything there, no ".*urd*muss neu" +10:41 < mst__> _rene_, there must be a message like that immediately preceding + running the touch command +10:41 -!- pepp [~pierre-er@vaf26-6-78-248-2-61.fbx.proxad.net] has joined + #libreoffice-dev +10:42 <@vmiklos> mst__: makes sense. +10:42 -!- matus [~ubuntu@adsl-dyn17.78-98-107.t-com.sk] has joined + #libreoffice-dev +10:42 <@_rene_> as said, there was done. I don't think I oversaw it +10:43 <@_rene_> but can try again later, for now I will just keep removing the + touch. according to the comment this shoudln't do harm +10:43 < mst__> _rene_, removing it will break incremental builds iirc +10:44 <@_rene_> but only if you change idl stuff inbetween +10:44 <@_rene_> which won't happen that often in package builds ;) +10:44 < mst__> _rene_, exactly +10:44 -!- Fridrich [~fridrich@71-99.199-178.cust.bluewin.ch] has joined + #libreoffice-dev +10:44 -!- mode/#libreoffice-dev [+o Fridrich] by ChanServ +10:45 <@_rene_> (when I am out of "use git", only when there's a new + (pre-)release" + +diff --git a/solenv/gbuild/UnoApiTarget.mk b/solenv/gbuild/UnoApiTarget.mk +index 98734ab..b281a84 100644 +--- a/solenv/gbuild/UnoApiTarget.mk ++++ b/solenv/gbuild/UnoApiTarget.mk +@@ -46,7 +46,7 @@ $(dir $(call gb_UnoApiPartTarget_get_target,))%/.dir : + $(if $(wildcard $(dir $@)),,mkdir -p $(dir $@)) + + $(call gb_UnoApiPartTarget_get_target,%.urd) : +- touch $@ ++ + + # TODO: + # - get idlc switch "-P" (generate .urd into package dir) diff --git a/debian/patches/fix-bluez-external.diff b/debian/patches/fix-bluez-external.diff new file mode 100644 index 00000000000..2fcd1353660 --- /dev/null +++ b/debian/patches/fix-bluez-external.diff @@ -0,0 +1,23 @@ +diff --git a/sd/Library_sd.mk b/sd/Library_sd.mk +index 9d399e8e3f5a..d70b5216fe05 100644 +--- a/sd/Library_sd.mk ++++ b/sd/Library_sd.mk +@@ -99,7 +99,6 @@ $(eval $(call gb_Library_use_libraries,sd,\ + )) + + $(eval $(call gb_Library_use_externals,sd,\ +- bluez_bluetooth_headers \ + boost_headers \ + libxml2 \ + dbus \ +@@ -575,6 +574,10 @@ $(eval $(call gb_Library_add_defs,sd,\ + -DENABLE_SDREMOTE_BLUETOOTH \ + )) + ++$(eval $(call gb_Library_use_externals,sd,\ ++ bluez_bluetooth_headers \ ++)) ++ + endif # ENABLE_SDREMOTE_BLUETOOTH=TRUE + + endif # ENABLE_SDREMOTE=TRUE diff --git a/debian/patches/fix-e_book_client_connect_direct_sync-sig.diff b/debian/patches/fix-e_book_client_connect_direct_sync-sig.diff new file mode 100644 index 00000000000..bc3ecf31e1e --- /dev/null +++ b/debian/patches/fix-e_book_client_connect_direct_sync-sig.diff @@ -0,0 +1,26 @@ +diff --git a/connectivity/source/drivers/evoab2/EApi.h b/connectivity/source/drivers/evoab2/EApi.h +index 8c05f95fa2ce..928786d79f00 100644 +--- a/connectivity/source/drivers/evoab2/EApi.h ++++ b/connectivity/source/drivers/evoab2/EApi.h +@@ -147,7 +147,7 @@ EAPI_EXTERN const gchar* (*eds_check_version) (guint required_major, guint requi + EAPI_EXTERN const gchar* (*e_source_get_uid) (ESource *source); + EAPI_EXTERN ESource* (*e_source_registry_ref_source) (ESourceRegistry *registry, const gchar *uid); + EAPI_EXTERN EBookClient* (*e_book_client_new) (ESource *source, GError **error); +-EAPI_EXTERN EBookClient* (*e_book_client_connect_direct_sync) (ESourceRegistry *registry, ESource *source, GCancellable *cancellable, GError **error); ++EAPI_EXTERN EBookClient* (*e_book_client_connect_direct_sync) (ESourceRegistry *registry, ESource *source, guint32 wait_for_connected_seconds, GCancellable *cancellable, GError **error); + EAPI_EXTERN gboolean (*e_client_open_sync) (EClient *client, gboolean only_if_exists, GCancellable *cancellable, GError **error); + EAPI_EXTERN ESource* (*e_client_get_source) (EClient *client); + EAPI_EXTERN gboolean (*e_book_client_get_contacts_sync) (EBookClient *client, const gchar *sexp, GSList **contacts, GCancellable *cancellable, GError **error); +diff --git a/connectivity/source/drivers/evoab2/NResultSet.cxx b/connectivity/source/drivers/evoab2/NResultSet.cxx +index 77d53939c1aa..83e792538fc0 100644 +--- a/connectivity/source/drivers/evoab2/NResultSet.cxx ++++ b/connectivity/source/drivers/evoab2/NResultSet.cxx +@@ -477,7 +477,7 @@ class OEvoabVersion38Helper : public OEvoabVersion36Helper + protected: + virtual EBookClient * createClient( ESource *pSource ) override + { +- return e_book_client_connect_direct_sync (get_e_source_registry (), pSource, nullptr, nullptr); ++ return e_book_client_connect_direct_sync (get_e_source_registry (), pSource, 10, nullptr, nullptr); + } + }; + diff --git a/debian/patches/fix-flaky-bridgetest.diff b/debian/patches/fix-flaky-bridgetest.diff new file mode 100644 index 00000000000..f66c01071cc --- /dev/null +++ b/debian/patches/fix-flaky-bridgetest.diff @@ -0,0 +1,46 @@ +Description: Add safer float comparisons to bridgetest equals() +Author: Marcus Tomlinson +Bug-Ubuntu: https://launchpad.net/bugs/1832360 + +--- a/testtools/source/bridgetest/bridgetest.cxx ++++ b/testtools/source/bridgetest/bridgetest.cxx +@@ -53,6 +53,7 @@ + #include "currentcontextchecker.hxx" + #include "multi.hxx" + #include ++#include + + using namespace osl; + using namespace cppu; +@@ -124,6 +125,9 @@ public: + + static bool equals( const TestElement & rData1, const TestElement & rData2 ) + { ++ const float epsilon_f = 0.00001f; ++ const double epsilon_d = 0.000000000001; ++ + check( rData1.Bool == rData2.Bool, "### bool does not match!" ); + check( rData1.Char == rData2.Char, "### char does not match!" ); + check( rData1.Byte == rData2.Byte, "### byte does not match!" ); +@@ -133,8 +137,8 @@ static bool equals( const TestElement & rData1, const TestElement & rData2 ) + check( rData1.ULong == rData2.ULong, "### unsigned long does not match!" ); + check( rData1.Hyper == rData2.Hyper, "### hyper does not match!" ); + check( rData1.UHyper == rData2.UHyper, "### unsigned hyper does not match!" ); +- check( rData1.Float == rData2.Float, "### float does not match!" ); +- check( rData1.Double == rData2.Double, "### double does not match!" ); ++ check( fabs( rData1.Float - rData2.Float ) < epsilon_f, "### float does not match!" ); ++ check( fabs( rData1.Double - rData2.Double ) < epsilon_d, "### double does not match!" ); + check( rData1.Enum == rData2.Enum, "### enum does not match!" ); + check( rData1.String == rData2.String, "### string does not match!" ); + check( rData1.Byte2 == rData2.Byte2, "### byte2 does not match!" ); +@@ -149,8 +153,8 @@ static bool equals( const TestElement & rData1, const TestElement & rData2 ) + rData1.ULong == rData2.ULong && + rData1.Hyper == rData2.Hyper && + rData1.UHyper == rData2.UHyper && +- rData1.Float == rData2.Float && +- rData1.Double == rData2.Double && ++ fabs( rData1.Float - rData2.Float ) < epsilon_f && ++ fabs( rData1.Double - rData2.Double ) < epsilon_d && + rData1.Enum == rData2.Enum && + rData1.String == rData2.String && + rData1.Byte2 == rData2.Byte2 && diff --git a/debian/patches/fix-internal-hsqldb-build.diff b/debian/patches/fix-internal-hsqldb-build.diff new file mode 100644 index 00000000000..477528515ac --- /dev/null +++ b/debian/patches/fix-internal-hsqldb-build.diff @@ -0,0 +1,45 @@ +diff -urN hsqldb.old/patches/use-system-servlet-api.jar.diff hsqldb/patches/use-system-servlet-api.jar.diff +--- a/external/hsqldb/patches/use-system-servlet-api.jar.diff 1970-01-01 01:00:00.000000000 +0100 ++++ b/external/hsqldb/patches/use-system-servlet-api.jar.diff 2013-03-19 15:09:42.137801521 +0100 +@@ -0,0 +1,29 @@ ++--- misc/hsqldb/build/build.xml +++++ misc/build/hsqldb/build/build.xml ++@@ -356,7 +356,7 @@ ++ optimize="${build.optimize}" ++ > ++ ++- +++ ++ ++ ++ ++@@ -818,7 +818,7 @@ ++ ${src}/org/hsqldb/util/RCData.java, ++ ${src}/org/hsqldb/util/SqlTool.java" ++ destdir="${basedir}/doc/src" ++- classpath="${basedir}/lib/servlet.jar;${basedir}/lib/junit.jar" +++ classpath="/usr/share/java/servlet-api-3.1.jar;${basedir}/lib/junit.jar" ++ author="true" ++ version="false" ++ use="true" ++@@ -839,7 +839,7 @@ ++ + +--- a/sc/qa/uitest/statistics/anova.py ++++ b/sc/qa/uitest/statistics/anova.py +@@ -98,7 +98,7 @@ class anova(UITestCase): + self.assertEqual(get_cell_by_position(document, 0, 6, 5).getValue(), 10) + self.assertEqual(get_cell_by_position(document, 0, 6, 6).getValue(), 10) + self.assertEqual(get_cell_by_position(document, 0, 6, 8).getString(), "SS") +- self.assertEqual(round(get_cell_by_position(document, 0, 6, 9).getValue(),11), 1876.56832844573) ++ self.assertEqual(round(get_cell_by_position(document, 0, 6, 9).getValue(),10), 1876.5683284457) + self.assertEqual(round(get_cell_by_position(document, 0, 6, 10).getValue(),10), 6025.1090909091) + #bug 80583 + self.assertEqual(round(get_cell_by_position(document, 0, 6, 11).getValue(),11), 7901.67741935484) +@@ -128,7 +128,7 @@ class anova(UITestCase): + self.assertEqual(round(get_cell_by_position(document, 0, 9, 9).getValue(),13), 4.3604117704492) + + self.assertEqual(get_cell_by_position(document, 0, 10, 8).getString(), "P-value") +- self.assertEqual(round(get_cell_by_position(document, 0, 10, 9).getValue(),14), 0.02246149518799) ++ self.assertEqual(round(get_cell_by_position(document, 0, 10, 9).getValue(),12), 0.022461495188) + + self.assertEqual(get_cell_by_position(document, 0, 11, 8).getString(), "F critical") + self.assertEqual(round(get_cell_by_position(document, 0, 11, 9).getValue(),13), 3.3403855582378) +--- a/sc/qa/uitest/statistics/descriptiveStatistics.py ++++ b/sc/qa/uitest/statistics/descriptiveStatistics.py +@@ -109,7 +109,7 @@ class descriptiveStatistics(UITestCase): + self.assertEqual(round(get_cell_by_position(document, 0, 6, 7).getValue(),11) , 139.49090909091) + self.assertEqual(round(get_cell_by_position(document, 0, 6, 8).getValue(),12) , 11.810626955878) + self.assertEqual(round(get_cell_by_position(document, 0, 6, 9).getValue(),13) , -1.4621677980825) +- self.assertEqual(round(get_cell_by_position(document, 0, 6, 10).getValue(),14) , 0.01524095329036) ++ self.assertEqual(round(get_cell_by_position(document, 0, 6, 10).getValue(),11) , 0.01524095329) + self.assertEqual(get_cell_by_position(document, 0, 6, 11).getValue() , 31) + self.assertEqual(get_cell_by_position(document, 0, 6, 12).getValue() , 26) + self.assertEqual(get_cell_by_position(document, 0, 6, 13).getValue() , 57) diff --git a/debian/patches/help-msg-add-package-info.diff b/debian/patches/help-msg-add-package-info.diff new file mode 100644 index 00000000000..dbfb32ae653 --- /dev/null +++ b/debian/patches/help-msg-add-package-info.diff @@ -0,0 +1,13 @@ +diff --git a/include/sfx2/strings.hrc b/include/sfx2/strings.hrc +index 1b0ea6ccb2ff..630f4330552a 100644 +--- a/include/sfx2/strings.hrc ++++ b/include/sfx2/strings.hrc +@@ -132,7 +132,7 @@ + #define STR_GID_CONTROLS NC_("STR_GID_CONTROLS", "Controls") + #define STR_QUITAPP NC_("STR_QUITAPP", "E~xit %PRODUCTNAME") + #define RID_STR_HELP NC_("RID_STR_HELP", "Help") +-#define RID_STR_HLPFILENOTEXIST NC_("RID_STR_HLPFILENOTEXIST", "The help file for this topic is not installed.") ++#define RID_STR_HLPFILENOTEXIST NC_("RID_STR_HLPFILENOTEXIST", "The help file for this topic is not installed. Please install the libreoffice-help-en-us package or the locale specific help package libreoffice-help-.") + #define STR_QUICKSTART_EXIT NC_("STR_QUICKSTART_EXIT", "Exit Quickstarter") + #define STR_QUICKSTART_TIP NC_("STR_QUICKSTART_TIP", "%PRODUCTNAME %PRODUCTVERSION Quickstarter") + #define STR_QUICKSTART_FILEOPEN NC_("STR_QUICKSTART_FILEOPEN", "Open Document...") diff --git a/debian/patches/hide-math-desktop-file.patch b/debian/patches/hide-math-desktop-file.patch new file mode 100644 index 00000000000..3e7fd4bbadc --- /dev/null +++ b/debian/patches/hide-math-desktop-file.patch @@ -0,0 +1,15 @@ +Description: Hide startcenter and math from the shell +Author: Olivier Tilloy +Bug-Ubuntu: https://launchpad.net/bugs/1696250 +Forwarded: not-needed + +--- a/sysui/desktop/menus/math.desktop ++++ b/sysui/desktop/menus/math.desktop +@@ -33,6 +33,7 @@ Keywords=Equation;OpenDocument Formula;F + InitialPreference=5 + StartupWMClass=libreoffice-math + X-KDE-Protocols=file,http,ftp,webdav,webdavs ++NotShowIn=GNOME; + + Actions=NewDocument; + [Desktop Action NewDocument] diff --git a/debian/patches/hppa-is-32bit.diff b/debian/patches/hppa-is-32bit.diff new file mode 100644 index 00000000000..b3ceb179fd3 --- /dev/null +++ b/debian/patches/hppa-is-32bit.diff @@ -0,0 +1,13 @@ +diff --git a/configure.ac b/configure.ac +index 42dc3b4..f5a51c9 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -6671,7 +6671,7 @@ if test "$ENABLE_JAVA" != ""; then + JAVAINTERPRETER=`win_short_path_for_make "$JAVAINTERPRETER"` + elif test "$cross_compiling" != "yes"; then + case $CPUNAME in +- AARCH64|AXP|X86_64|HPPA|IA64|POWERPC64|S390X|SPARC64|GODSON64) ++ AARCH64|AXP|X86_64|IA64|POWERPC64|S390X|SPARC64|GODSON64) + if test -f "$JAVAINTERPRETER" -a "`$JAVAINTERPRETER -version 2>&1 | $GREP -i 64-bit`" = "" >/dev/null; then + AC_MSG_WARN([You are building 64-bit binaries but the JDK $JAVAINTERPRETER is 32-bit]) + AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a 64-bit JDK]) diff --git a/debian/patches/hrk-euro.diff b/debian/patches/hrk-euro.diff new file mode 100644 index 00000000000..b4fbe69af7b --- /dev/null +++ b/debian/patches/hrk-euro.diff @@ -0,0 +1,156 @@ +From 7c4b2db21ef77b37daf234ac1ab9989234606a22 Mon Sep 17 00:00:00 2001 +From: Eike Rathke +Date: Fri, 22 Jul 2022 22:12:02 +0200 +Subject: Resolves: tdf#150011 Add HRK Croatian Kuna conversion to EUR Euro + +TODO: switch defaults before 2023-01-01 in +i18npool/source/localedata/data/hr_HR.xml + +Change-Id: Ifc62aefbc8c9fe8bbf044f61ae4fd6eeff692185 +Reviewed-on: https://gerrit.libreoffice.org/c/core/+/137371 +Reviewed-by: Eike Rathke +Tested-by: Jenkins +--- + i18npool/source/localedata/data/hr_HR.xml | 8 ++++++++ + officecfg/registry/data/org/openoffice/Office/Calc.xcu | 11 +++++++++++ + sc/source/core/tool/interpr2.cxx | 3 ++- + 3 files changed, 21 insertions(+), 1 deletion(-) + +diff --git a/i18npool/source/localedata/data/hr_HR.xml b/i18npool/source/localedata/data/hr_HR.xml +index 0c493131e16b..4de83e5535cd 100644 +--- a/i18npool/source/localedata/data/hr_HR.xml ++++ b/i18npool/source/localedata/data/hr_HR.xml +@@ -421,6 +421,14 @@ + Hrvatska Kuna + 2 + ++ ++ ++ EUR ++ € ++ EUR ++ Euro ++ 2 ++ + + + +diff --git a/officecfg/registry/data/org/openoffice/Office/Calc.xcu b/officecfg/registry/data/org/openoffice/Office/Calc.xcu +index a62d06512704..eda60fe6c434 100644 +--- a/officecfg/registry/data/org/openoffice/Office/Calc.xcu ++++ b/officecfg/registry/data/org/openoffice/Office/Calc.xcu +@@ -228,6 +228,17 @@ + 3.45280 + + ++ ++ ++ EUR ++ ++ ++ HRK ++ ++ ++ 7.53450 ++ ++ + + + +diff --git a/sc/source/core/tool/interpr2.cxx b/sc/source/core/tool/interpr2.cxx +index 31c42a4b728a..67fcd9f787f8 100644 +--- a/sc/source/core/tool/interpr2.cxx ++++ b/sc/source/core/tool/interpr2.cxx +@@ -3235,7 +3235,8 @@ static bool lclConvertMoney( const OUString& aSearchUnit, double& rfRate, int& r + { "SKK", 30.1260, 2 }, + { "EEK", 15.6466, 2 }, + { "LVL", 0.702804, 2 }, +- { "LTL", 3.45280, 2 } ++ { "LTL", 3.45280, 2 }, ++ { "HRK", 7.53450, 2 } + }; + + for (const auto & i : aConvertTable) +-- +cgit v1.2.1 + +From b1a2f727ca99ecd3402d4b051b99cbfd24266e59 Mon Sep 17 00:00:00 2001 +From: Eike Rathke +Date: Fri, 22 Jul 2022 22:17:11 +0200 +Subject: Related: tdf#150011 Add HRK Croatian Kuna to Euro conversion wizard + +Maybe just for completeness, it's removed from menu but might be +callable as macro. + +Change-Id: Iade0be845186d3deb2f00f4aaa230c0b344cea72 +Reviewed-on: https://gerrit.libreoffice.org/c/core/+/137372 +Reviewed-by: Eike Rathke +Tested-by: Jenkins +--- + wizards/source/euro/Init.xba | 16 ++++++++++++++++ + wizards/source/resources/resources_en_US.properties | 1 + + 2 files changed, 17 insertions(+) + +diff --git a/wizards/source/euro/Init.xba b/wizards/source/euro/Init.xba +index 623a0a53be46..9f56c503a347 100644 +--- a/wizards/source/euro/Init.xba ++++ b/wizards/source/euro/Init.xba +@@ -89,6 +89,7 @@ Public sCurrSLOVAK as String + Public sCurrESTONIAN as String + Public sCurrLATVIAN as String + Public sCurrLITHUANIAN as String ++Public sCurrCROATIAN as String + + Public sPrgsRETRIEVAL as String + Public sPrgsCONVERTING as String +@@ -214,6 +215,7 @@ Dim LocWorkPath as String + sCurrESTONIAN = GetResText("CURRENCIES_16") + sCurrLATVIAN = GetResText("CURRENCIES_17") + sCurrLITHUANIAN = GetResText("CURRENCIES_18") ++ sCurrCROATIAN = GetResText("CURRENCIES_19") + .cmdCancel.Label = sCANCEL + .cmdHelp.Label = sHELP + .cmdBack.Label = GetResText("STEP_ZERO_2") +@@ -393,6 +395,11 @@ Sub InitializeLanguages() + LangIDValue(18,0,1) = "LT" + LangIDValue(18,0,2) = "-427" + ++' CURRENCIES_CROATIAN ++ LangIDValue(19,0,0) = "hr" ++ LangIDValue(19,0,1) = "HR" ++ LangIDValue(19,0,2) = "-41A" ++ + End Sub + + +@@ -572,6 +579,15 @@ Dim i as Integer + CurrValue(18,4) = "Lt" + CurrValue(18,5) = "LTL" + ++ CurrValue(19,0) = sCurrCROATIAN ++ ' real conversion rate ++ CurrValue(19,1) = 7.53450 ++ ' rounded conversion rate ++ CurrValue(19,2) = 7.5 ++ CurrValue(19,3) = "kn" ++ CurrValue(19,4) = "kn" ++ CurrValue(19,5) = "HRK" ++ + i = -1 + CurrSymbolList(0) = "" + CurrSymbolList(1) = "" +diff --git a/wizards/source/resources/resources_en_US.properties b/wizards/source/resources/resources_en_US.properties +index 32f9104e97e0..8649b2500e6a 100644 +--- a/wizards/source/resources/resources_en_US.properties ++++ b/wizards/source/resources/resources_en_US.properties +@@ -448,6 +448,7 @@ CURRENCIES_15=Slovak Koruna + CURRENCIES_16=Estonian Kroon + CURRENCIES_17=Latvian Lats + CURRENCIES_18=Lithuanian Litas ++CURRENCIES_19=Croatian Kuna + STEP_LASTPAGE_0=Progress + STEP_LASTPAGE_1=Retrieving the relevant documents... + STEP_LASTPAGE_2=Converting the documents... +-- +cgit v1.2.1 + diff --git a/debian/patches/install-fixes.diff b/debian/patches/install-fixes.diff new file mode 100644 index 00000000000..891bb321c78 --- /dev/null +++ b/debian/patches/install-fixes.diff @@ -0,0 +1,166 @@ +diff --git a/bin/distro-install-file-lists b/bin/distro-install-file-lists +index eaabf9c..c1b1ec6 100755 +--- libreoffice-3.5.0/bin/distro-install-file-lists ++++ libreoffice-3.5.0/bin/distro-install-file-lists +@@ -8,6 +8,8 @@ + exit 1 + fi + ++export OOO_VENDOR=Debian ++ + BUILDDIR=`pwd` + FILELISTSDIR="$BUILDDIR/file-lists" + +@@ -351,152 +351,6 @@ if test "z$OOO_VENDOR" != "zDebian" ; then + remove_duplicity_from_flists common_list.txt lang_bg_list.txt $INSTALLDIR/presets/config/styles.sod + # the British fixes can be removed after the issue #54113 is fixed + remove_duplicity_from_flists common_list.txt lang_en-GB_list.txt $INSTALLDIR/presets/config/standard.sog +- +-else +- +- echo "Creating package directories..." +- +- test -d pkg && rm -r pkg || : +- +- # Create package tree (needed by Debian's dpkg) +- # create_package_directory +- create_package_directory() +- { +- listfile=$1 +- directory="$2" +- perl -nl \ +- -e " if(/^%dir (.*)/) +- {system('mkdir', '-p', '-m', '755', \"$directory\".\$1);} +- else +- {rename('./'.\$_, \"$directory\".\$_);} +- " \ +- $listfile +- } +- +- create_package_directory gid_Module_Root_Ure_Hidden pkg/ure +- +- create_package_directory gid_Module_Root pkg/libreoffice-common +- create_package_directory gid_Module_Root_Brand pkg/libreoffice-common +- create_package_directory gid_Module_Root_Files_Images pkg/libreoffice-common +- create_package_directory gid_Module_Oo_Linguistic pkg/libreoffice-common +- create_package_directory gid_Module_Optional_Xsltfiltersamples pkg/libreoffice-common +- create_package_directory gid_Module_Optional_Grfflt pkg/libreoffice-draw +- create_package_directory gid_Module_Prg_Calc_Bin pkg/libreoffice-calc +- create_package_directory gid_Module_Prg_Math_Bin pkg/libreoffice-math +- create_package_directory gid_Module_Prg_Draw_Bin pkg/libreoffice-draw +- create_package_directory gid_Module_Prg_Wrt_Bin pkg/libreoffice-writer +- create_package_directory gid_Module_Prg_Impress_Bin pkg/libreoffice-impress +- create_package_directory gid_Module_Prg_Base_Bin pkg/libreoffice-base +- create_package_directory gid_Module_Brand_Prg_Calc pkg/libreoffice-calc +- create_package_directory gid_Module_Brand_Prg_Math pkg/libreoffice-math +- create_package_directory gid_Module_Brand_Prg_Draw pkg/libreoffice-draw +- create_package_directory gid_Module_Brand_Prg_Wrt pkg/libreoffice-writer +- create_package_directory gid_Module_Brand_Prg_Impress pkg/libreoffice-impress +- create_package_directory gid_Module_Brand_Prg_Base pkg/libreoffice-base +- create_package_directory gid_Module_Pyuno pkg/python-uno +- create_package_directory gid_Module_Optional_Gnome pkg/libreoffice-gnome +- +- create_package_directory gid_Module_Root_Files_2 pkg/libreoffice-common +- create_package_directory gid_Module_Root_Files_3 pkg/libreoffice-common +- create_package_directory gid_Module_Root_Files_4 pkg/libreoffice-common +- create_package_directory gid_Module_Root_Files_5 pkg/libreoffice-common +- create_package_directory gid_Module_Root_Files_6 pkg/libreoffice-common +- create_package_directory gid_Module_Root_Files_7 pkg/libreoffice-common +- if [ -e gid_Module_Optional_Pymailmerge ]; then +- create_package_directory gid_Module_Optional_Pymailmerge pkg/libreoffice-emailmerge +- else # post m26 +- mkdir -p pkg/libreoffice-emailmerge/$INSTALLDIR/program +- mv pkg/libreoffice-common/$INSTALLDIR/program/mailmerge.py \ +- pkg/libreoffice-emailmerge/$INSTALLDIR/program/mailmerge.py +- fi +- create_package_directory gid_Module_Optional_OGLTrans pkg/libreoffice-ogltrans +- +- create_package_directory gid_Module_Root_SDK pkg/libreoffice-dev +- +- for l in `echo $WITH_LANG_LIST`; do +- for p in Impress Draw Math Calc Base Writer; do +- create_package_directory gid_Module_Langpack_${p}_`echo $l | sed -e s/-/_/g` pkg/libreoffice-l10n-$l +- done +- create_package_directory gid_Module_Langpack_Basis_`echo $l | sed -e s/-/_/g` pkg/libreoffice-l10n-$l +- create_package_directory gid_Module_Langpack_Brand_`echo $l | sed -e s/-/_/g` pkg/libreoffice-l10n-$l +- create_package_directory gid_Module_Langpack_Resource_`echo $l | sed -e s/-/_/g` pkg/libreoffice-l10n-$l +- create_package_directory gid_Module_Helppack_Help_`echo $l | sed -e s/-/_/g` pkg/libreoffice-help-$l +- +- # some help files are in _Langpack_{Writer,Impress,...}_ +- # move them from -l10n to -help +- if [ "$l" = "en-US" ]; then d=en; else d=$l; fi +- mv pkg/libreoffice-l10n-$l/$INSTALLDIR/help/$d/* \ +- pkg/libreoffice-help-$l/$INSTALLDIR/help/$d && \ +- rmdir pkg/libreoffice-l10n-$l/$INSTALLDIR/help/$d +- done +- +- # move_wrappers [...] +- move_wrappers() +- { +- directory=$1 +- shift +- mkdir -m755 -p "$directory"/usr/bin +- while test -n "$1"; do +- mv usr/*bin/"$1$BINSUFFIX" "$directory"/usr/bin +- shift +- done +- } +- move_wrappers pkg/libreoffice-common soffice unopkg +- if test "$COMPAT_OOWRAPPERS" = "YES" ; then +- move_wrappers pkg/libreoffice-common ooffice oofromtemplate +- move_wrappers pkg/libreoffice-base oobase +- move_wrappers pkg/libreoffice-writer oowriter ooweb +- move_wrappers pkg/libreoffice-calc oocalc +- move_wrappers pkg/libreoffice-impress ooimpress +- move_wrappers pkg/libreoffice-math oomath +- move_wrappers pkg/libreoffice-draw oodraw +- fi +- move_wrappers pkg/libreoffice-common libreoffice lofromtemplate +- move_wrappers pkg/libreoffice-base lobase +- move_wrappers pkg/libreoffice-writer lowriter loweb +- move_wrappers pkg/libreoffice-calc localc +- move_wrappers pkg/libreoffice-impress loimpress +- move_wrappers pkg/libreoffice-math lomath +- move_wrappers pkg/libreoffice-draw lodraw +- +- # Move all libraries, binaries, *.rdb from -common to -core +- for d in $INSTALLDIR/program $INSTALLDIR/program; do \ +- if [ ! -d $DESTDIR/pkg/libreoffice-core/$d ]; then \ +- mkdir -p $DESTDIR/pkg/libreoffice-core/$d; \ +- fi && +- ( cd pkg/libreoffice-common/$d +- find -maxdepth 1 \ +- -regex '\./\(.*\.so.*\|.*\.bin\|pagein\|msfontextract\|.*\.rdb\|javaldx\|uri-encode\)' \ +- -exec mv {} $DESTDIR/pkg/libreoffice-core/$d \; +- ); \ +- done +- +- # install additional ooo-build scripts & misc stuff +- mkdir -p pkg/libreoffice-common/usr/share/man/man1 +- if test "$COMPAT_OOWRAPPERS" = "YES" ; then +- mv usr/share/man/man1/openoffice$BINSUFFIX.1 \ +- pkg/libreoffice-common/usr/share/man/man1 +- fi +- mv usr/share/man/man1/libreoffice$BINSUFFIX.1 \ +- pkg/libreoffice-common/usr/share/man/man1 +- mkdir -p pkg/libreoffice-common/etc/bash_completion.d +- if test "$COMPAT_OOWRAPPERS" = "YES" ; then +- mv etc/bash_completion.d/ooffice$BINSUFFIX.sh \ +- pkg/libreoffice-common/etc/bash_completion.d +- fi +- mv etc/bash_completion.d/libreoffice$BINSUFFIX.sh \ +- pkg/libreoffice-common/etc/bash_completion.d +- mv .$INSTALLDIR/program/java-set-classpath \ +- pkg/libreoffice-common/$INSTALLDIR/program +- if echo $WITH_LANG_LIST | grep -q en-US; then +- for i in forms/resume.ott officorr/project-proposal.ott; do \ +- mkdir -p pkg/libreoffice-common/$INSTALLDIR/share/template/en-US/`dirname $i`; \ +- mv .$INSTALLDIR/share/template/en-US/$i \ +- pkg/libreoffice-common/$INSTALLDIR/share/template/en-US/$i; \ +- done; \ +- fi +- # Warn for any remaining files +- find . -path './pkg' -prune -o -not -name 'gid_Module_*' -not -type d -exec echo "File not packaged: {}" \; + fi + + # mark the config files diff --git a/debian/patches/javadoc-optional.diff b/debian/patches/javadoc-optional.diff new file mode 100644 index 00000000000..704ae20ec56 --- /dev/null +++ b/debian/patches/javadoc-optional.diff @@ -0,0 +1,153 @@ +Gemeinsame Unterverzeichnisse: odk-old/config und odk/config. +Gemeinsame Unterverzeichnisse: odk-old/docs und odk/docs. +Gemeinsame Unterverzeichnisse: odk-old/examples und odk/examples. +diff --git a/odk/Module_odk.mk b/odk/Module_odk.mk +index 32bdfc1..a174932 100644 +--- a/odk/Module_odk.mk ++++ b/odk/Module_odk.mk +@@ -43,11 +43,13 @@ ifneq ($(ENABLE_JAVA),) + $(eval $(call gb_Module_add_targets,odk,\ + $(if $(and $(BUILD_UNOWINREG),$(filter GCC,$(COM))),CustomTarget_unowinreg)\ + CustomTarget_classes \ +- CustomTarget_javadoc \ +- GeneratedPackage_odk_javadoc \ + GeneratedPackage_uno_loader_classes \ + $(if $(filter WNT,$(OS)),Library_unowinreg) \ + Package_unowinreg \ ++ $(if $(JAVADOC),\ ++ CustomTarget_javadoc \ ++ GeneratedPackage_odk_javadoc \ ++ ) \ + )) + endif + +Gemeinsame Unterverzeichnisse: odk-old/pack und odk/pack. +Gemeinsame Unterverzeichnisse: odk-old/qa und odk/qa. +Gemeinsame Unterverzeichnisse: odk-old/settings und odk/settings. +Gemeinsame Unterverzeichnisse: odk-old/source und odk/source. +Gemeinsame Unterverzeichnisse: odk-old/util und odk/util. +--- a/configure.ac-old 2013-05-27 18:32:42.187305241 +0200 ++++ b/configure.ac 2013-05-27 18:44:29.131286710 +0200 +@@ -2057,6 +2057,18 @@ AC_ARG_WITH(doxygen, + documentation. Not relevant in the --disable-odk case.]), + ,with_doxygen=yes) + ++AC_ARG_WITH( ++ [javadoc], ++ AS_HELP_STRING( ++ [--with-javadoc], ++ [Specifies the javadoc executable to use when generating ODK Java ++ documentation. --without-javadoc disables generation of ODK Java ++ documentation. Not relevant in the --disable-odk case.]) ++ [ ++ Usage: --with-javadoc= ++ ],, ++ [with_javadoc=yes]) ++ + AC_ARG_WITH(visual-studio, + AS_HELP_STRING([--with-visual-studio=<2019>], + [Specify which Visual Studio version to use in case several are +@@ -6290,34 +6302,44 @@ + dnl =================================================================== + dnl Checks for javadoc + dnl =================================================================== +-if test "$ENABLE_JAVA" != ""; then ++if test "$ENABLE_JAVA" != "" -a "$enable_odk" != no; then + if test -z "$with_jdk_home"; then + AC_PATH_PROG(JAVADOC, javadoc) + else +- _javadoc_path="$with_jdk_home/bin/javadoc" +- dnl Check if there is a javadoc at all. +- if test -x "$_javadoc_path"; then +- JAVADOC=$_javadoc_path +- else +- AC_PATH_PROG(JAVADOC, javadoc) +- fi +- fi +- if test -z "$JAVADOC"; then +- AC_MSG_ERROR([$_javadoc_path not found set with_jdk_home]) +- fi +- if test "$build_os" = "cygwin"; then +- if test x`echo "$JAVADOC" | $GREP -i '\.exe$'` = x; then +- JAVADOC="${JAVADOC}.exe" +- fi +- JAVADOC=`win_short_path_for_make "$JAVADOC"` +- fi ++ if test "$with_javadoc" = "yes"; then ++ _javadoc_path="$with_jdk_home/bin/javadoc" ++ dnl Check if there is a javadoc at all. ++ if test -x "$_javadoc_path"; then ++ JAVADOC=$_javadoc_path ++ else ++ AC_PATH_PROG(JAVADOC, javadoc) ++ fi ++ if test -z "$JAVADOC"; then ++ AC_MSG_ERROR([$_javadoc_path not found set with_jdk_home]) ++ fi ++ if test "$build_os" = "cygwin"; then ++ if test x`echo "$JAVADOC" | $GREP -i '\.exe$'` = x; then ++ JAVADOC="${JAVADOC}.exe" ++ fi ++ JAVADOC=`win_short_path_for_make "$JAVADOC"` ++ fi + +- if test `$JAVADOC --version 2>&1 | $GREP -c "gjdoc"` -gt 0; then +- JAVADOCISGJDOC="yes" ++ if test `$JAVADOC --version 2>&1 | $GREP -c "gjdoc"` -gt 0; then ++ JAVADOCISGJDOC="yes" ++ fi ++ else ++ unset JAVADOC ++ fi + fi ++else ++ unset JAVADOC + fi + AC_SUBST(JAVADOCISGJDOC) + ++if test "$JAVADOCISGJDOC" = "yes"; then ++ unset JAVADOC ++fi ++ + if test "$ENABLE_JAVA" != ""; then + # check if JAVA_HOME was (maybe incorrectly?) set automatically to /usr + if test "$JAVA_HOME" = "/usr" -a "x$with_jdk_home" = "x"; then +diff --git a/odk/CustomTarget_check.mk b/odk/CustomTarget_check.mk +index a9b542d..707829a 100644 +--- a/odk/CustomTarget_check.mk ++++ b/odk/CustomTarget_check.mk +@@ -35,7 +35,7 @@ $(call gb_CustomTarget_get_workdir,odk/check)/checkbin : \ + $(if $(filter WNT,$(OS)),$(call gb_Package_get_target,odk_config_win)) \ + $(call gb_Package_get_target,odk_docs) \ + $(call gb_Package_get_target,odk_html) \ +- $(if $(ENABLE_JAVA),$(call gb_GeneratedPackage_get_target,odk_javadoc)) \ ++ $(if $(JAVADOC),$(call gb_GeneratedPackage_get_target,odk_javadoc)) \ + $(call gb_Package_get_target,odk_settings) \ + $(call gb_Package_get_target,odk_settings_generated) \ + $(if $(ENABLE_JAVA),$(call gb_Package_get_target,odk_unowinreg)) +diff --git a/odk/util/check.pl b/odk/util/check.pl +index 899b42c..2c7a780 100644 +--- a/odk/util/check.pl ++++ b/odk/util/check.pl +@@ -188,7 +188,7 @@ if (-d "$SdkDir") { + # improvement required + my $solar_java = $ENV{"ENABLE_JAVA"}; + my $JDK = $ENV{"JDK"}; +- if (defined($solar_java) && $solar_java ne "" && (!defined($JDK) || $JDK ne "gcj")) { ++ if (defined($solar_java) && $solar_java ne "" && $ENV{"JAVADOC"} ne "") { + print "check java docu: "; + if (check_dir("docs/java/ref")) { + if (!check_file("docs/java/ref/index.html")) { +diff --git a/Repository.mk b/Repository.mk +index 5f2654b..471210f 100644 +--- a/Repository.mk ++++ b/Repository.mk +@@ -834,7 +841,7 @@ $(eval $(call gb_Helper_register_packages_for_install,sdk,\ + offapi_idl \ + udkapi_idl \ + $(if $(ENABLE_JAVA), \ +- odk_javadoc \ ++ $(if $(JAVADOC),odk_javadoc) \ + odk_uno_loader_classes \ + odk_unowinreg \ + ) \ diff --git a/debian/patches/jdbc-driver-classpaths.diff b/debian/patches/jdbc-driver-classpaths.diff new file mode 100644 index 00000000000..8f4a1660e75 --- /dev/null +++ b/debian/patches/jdbc-driver-classpaths.diff @@ -0,0 +1,35 @@ +diff --git a/officecfg/registry/data/org/openoffice/Office/DataAccess.xcu b/officecfg/registry/data/org/openoffice/Office/DataAccess.xcu +index 9be30a2..59c87cb 100644 +--- a/officecfg/registry/data/org/openoffice/Office/DataAccess.xcu ++++ b/officecfg/registry/data/org/openoffice/Office/DataAccess.xcu +@@ -147,6 +147,30 @@ + + + ++ ++ ++ ++ ++ file:///usr/share/java/mariadb-java-client.jar ++ ++ ++ ++ ++ file:///usr/share/java/mysql.jar ++ ++ ++ ++ ++ file:///usr/share/java/posgresql.jar ++ ++ ++ ++ ++ file:///usr/share/java/jtds.jar ++ ++ ++ ++ + + + diff --git a/debian/patches/jurt-soffice-location.diff b/debian/patches/jurt-soffice-location.diff new file mode 100644 index 00000000000..aa334d8ea4d --- /dev/null +++ b/debian/patches/jurt-soffice-location.diff @@ -0,0 +1,20 @@ +commit b71107fb12e3c3125e0cb62c5a4f6636a80c6408 +Author: Bjoern Michaelsen +AuthorDate: Tue Jun 7 11:52:37 2011 +0200 +Commit: Bjoern Michaelsen +CommitDate: Tue Jun 7 11:52:37 2011 +0200 + + on debian-based systems, we know where our soffice binary is + +diff --git a/jurt/com/sun/star/lib/util/NativeLibraryLoader.java b/jurt/com/sun/star/lib/util/NativeLibraryLoader.jav +index da22980..36664ca 100644 +--- libreoffice-3.5.0/ridljar/com/sun/star/lib/util/NativeLibraryLoader.java ++++ libreoffice-3.5.0/ridljar/com/sun/star/lib/util/NativeLibraryLoader.java +@@ -111,6 +111,8 @@ public final class NativeLibraryLoader { + } + } + } ++ if (name.equals("soffice")) ++ return new File("/usr/lib/libreoffice/program/soffice"); + return null; + } diff --git a/debian/patches/liborcus-0.16.diff b/debian/patches/liborcus-0.16.diff new file mode 100644 index 00000000000..a544ec7ca35 --- /dev/null +++ b/debian/patches/liborcus-0.16.diff @@ -0,0 +1,1255 @@ +From 109ed8f775dddfede012d56d078abd70b45490c0 Mon Sep 17 00:00:00 2001 +From: Kohei Yoshida +Date: Wed, 9 Sep 2020 21:23:48 -0400 +Subject: Upgrade liborcus to 0.16.0. + +Change-Id: Iae29fb26417dfc161698a81bee84e81545969065 +Reviewed-on: https://gerrit.libreoffice.org/c/core/+/102502 +Tested-by: Jenkins +Reviewed-by: Kohei Yoshida +--- + RepositoryExternal.mk | 4 +- + configure.ac | 2 +- + download.lst | 4 +- + ...1-Mark-all-untentionally-unused-variables.patch | 376 +++++++++++++++++++++ + external/liborcus/ExternalPackage_liborcus.mk | 8 +- + external/liborcus/ExternalProject_liborcus.mk | 4 +- + external/liborcus/Library_orcus-parser.mk | 1 + + external/liborcus/Library_orcus.mk | 4 + + external/liborcus/UnpackedTarball_liborcus.mk | 1 + + external/liborcus/libtool.patch.0 | 10 +- + external/liborcus/windows-constants-hack.patch | 2 +- + sc/source/filter/inc/orcusinterface.hxx | 21 +- + sc/source/filter/orcus/interface.cxx | 82 +++-- + sc/source/filter/orcus/xmlcontext.cxx | 7 +- + sc/source/ui/xmlsource/xmlsourcedlg.cxx | 6 +- + 15 files changed, 480 insertions(+), 52 deletions(-) + create mode 100644 external/liborcus/0001-Mark-all-untentionally-unused-variables.patch + +diff --git a/RepositoryExternal.mk b/RepositoryExternal.mk +index d9fa980d7f24..1f0a91de142a 100644 +--- a/RepositoryExternal.mk ++++ b/RepositoryExternal.mk +@@ -3270,7 +3270,7 @@ $(call gb_LinkTarget_set_include,$(1),\ + ) + + $(call gb_LinkTarget_add_libs,$(1),\ +- -L$(call gb_UnpackedTarball_get_dir,liborcus)/src/liborcus/.libs -lorcus-0.15 \ ++ -L$(call gb_UnpackedTarball_get_dir,liborcus)/src/liborcus/.libs -lorcus-0.16 \ + ) + + $(if $(SYSTEM_BOOST), \ +@@ -3289,7 +3289,7 @@ $(call gb_LinkTarget_set_include,$(1),\ + ) + + $(call gb_LinkTarget_add_libs,$(1),\ +- -L$(call gb_UnpackedTarball_get_dir,liborcus)/src/parser/.libs -lorcus-parser-0.15 \ ++ -L$(call gb_UnpackedTarball_get_dir,liborcus)/src/parser/.libs -lorcus-parser-0.16 \ + ) + + endef +diff --git a/configure.ac b/configure.ac +index 8e8d5eb662d9..06398bfa99a7 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -10126,7 +10126,7 @@ AC_SUBST(ENABLE_FUZZERS) + dnl =================================================================== + dnl Orcus + dnl =================================================================== +-libo_CHECK_SYSTEM_MODULE([orcus],[ORCUS],[liborcus-0.15 >= 0.15.0]) ++libo_CHECK_SYSTEM_MODULE([orcus],[ORCUS],[liborcus-0.16 >= 0.16.0]) + if test "$with_system_orcus" != "yes"; then + if test "$SYSTEM_BOOST" = "TRUE"; then + # =========================================================== +diff --git a/download.lst b/download.lst +index ee4ba8a1c83b..345ddd19537b 100644 +--- a/download.lst ++++ b/download.lst +@@ -206,8 +206,8 @@ export OPENLDAP_SHA256SUM := cdd6cffdebcd95161a73305ec13fc7a78e9707b46ca9f84fb89 + export OPENLDAP_TARBALL := openldap-2.4.45.tgz + export OPENSSL_SHA256SUM := 14cb464efe7ac6b54799b34456bd69558a749a4931ecfd9cf9f71d7881cac7bc + export OPENSSL_TARBALL := openssl-1.0.2t.tar.gz +-export ORCUS_SHA256SUM := cfb2aa60825f2a78589ed030c07f46a1ee16ef8a2d1bf2279192fbc1ae5a5f61 +-export ORCUS_TARBALL := liborcus-0.15.4.tar.bz2 ++export ORCUS_SHA256SUM := 854c6ec167ace59baa2984e175bac7b5b2af91bfde4bb10d2088b87a51ed76ec ++export ORCUS_TARBALL := liborcus-0.16.0.tar.bz2 + export OWNCLOUD_ANDROID_LIB_SHA256SUM := b18b3e3ef7fae6a79b62f2bb43cc47a5346b6330f6a383dc4be34439aca5e9fb + export OWNCLOUD_ANDROID_LIB_TARBALL := owncloud-android-library-0.9.4-no-binary-deps.tar.gz + export PAGEMAKER_SHA256SUM := 66adacd705a7d19895e08eac46d1e851332adf2e736c566bef1164e7a442519d +diff --git a/external/liborcus/0001-Mark-all-untentionally-unused-variables.patch b/external/liborcus/0001-Mark-all-untentionally-unused-variables.patch +new file mode 100644 +index 000000000000..b0f6a572aff7 +--- /dev/null ++++ b/external/liborcus/0001-Mark-all-untentionally-unused-variables.patch +@@ -0,0 +1,376 @@ ++From 6d34c41b661a9e8dddf6d08bf1f3c1fd4f5581da Mon Sep 17 00:00:00 2001 ++From: Kohei Yoshida ++Date: Fri, 11 Sep 2020 21:39:09 -0400 ++Subject: [PATCH] Mark all untentionally unused variables. ++ ++--- ++ include/orcus/css_parser.hpp | 70 ++++++++++++++++++++++++------ ++ include/orcus/csv_parser.hpp | 5 ++- ++ include/orcus/json_parser.hpp | 15 +++++-- ++ include/orcus/sax_parser.hpp | 35 ++++++++++++--- ++ include/orcus/sax_token_parser.hpp | 20 +++++++-- ++ include/orcus/yaml_parser.hpp | 10 ++++- ++ 6 files changed, 124 insertions(+), 31 deletions(-) ++ ++diff --git a/include/orcus/css_parser.hpp b/include/orcus/css_parser.hpp ++index cdfae5e0..3e96980b 100644 ++--- a/include/orcus/css_parser.hpp +++++ b/include/orcus/css_parser.hpp ++@@ -31,23 +31,44 @@ namespace orcus { ++ class css_handler ++ { ++ public: ++- void at_rule_name(const char* p, size_t n) {} +++ void at_rule_name(const char* p, size_t n) +++ { +++ (void)p; (void)n; +++ } ++ ++- void simple_selector_type(const char* p, size_t n) {} +++ void simple_selector_type(const char* p, size_t n) +++ { +++ (void)p; (void)n; +++ } ++ ++- void simple_selector_class(const char* p, size_t n) {} +++ void simple_selector_class(const char* p, size_t n) +++ { +++ (void)p; (void)n; +++ } ++ ++- void simple_selector_pseudo_element(orcus::css::pseudo_element_t pe) {} +++ void simple_selector_pseudo_element(orcus::css::pseudo_element_t pe) +++ { +++ (void)pe; +++ } ++ ++- void simple_selector_pseudo_class(orcus::css::pseudo_class_t pc) {} +++ void simple_selector_pseudo_class(orcus::css::pseudo_class_t pc) +++ { +++ (void)pc; +++ } ++ ++- void simple_selector_id(const char* p, size_t n) {} +++ void simple_selector_id(const char* p, size_t n) +++ { +++ (void)p; (void)n; +++ } ++ ++ void end_simple_selector() {} ++ ++ void end_selector() {} ++ ++- void combinator(orcus::css::combinator_t combinator) {} +++ void combinator(orcus::css::combinator_t combinator) +++ { +++ (void)combinator; +++ } ++ ++ /** ++ * Called at each property name. ++@@ -55,7 +76,10 @@ public: ++ * @param p pointer to the char-array containing the property name string. ++ * @param n length of the property name string. ++ */ ++- void property_name(const char* p, size_t n) {} +++ void property_name(const char* p, size_t n) +++ { +++ (void)p; (void)n; +++ } ++ ++ /** ++ * Called at each ordinary property value string. ++@@ -63,7 +87,10 @@ public: ++ * @param p pointer to the char-array containing the value string. ++ * @param n length of the value string. ++ */ ++- void value(const char* p, size_t n) {} +++ void value(const char* p, size_t n) +++ { +++ (void)p; (void)n; +++ } ++ ++ /** ++ * Called at each RGB color value of a property. ++@@ -72,7 +99,10 @@ public: ++ * @param green value of green (0-255) ++ * @param blue value of blue (0-255) ++ */ ++- void rgb(uint8_t red, uint8_t green, uint8_t blue) {} +++ void rgb(uint8_t red, uint8_t green, uint8_t blue) +++ { +++ (void)red; (void)green; (void)blue; +++ } ++ ++ /** ++ * Called at each RGB color value of a property with alpha transparency ++@@ -83,7 +113,10 @@ public: ++ * @param blue value of blue (0-255) ++ * @param alpha alpha transparency value ++ */ ++- void rgba(uint8_t red, uint8_t green, uint8_t blue, double alpha) {} +++ void rgba(uint8_t red, uint8_t green, uint8_t blue, double alpha) +++ { +++ (void)red; (void)green; (void)blue; (void)alpha; +++ } ++ ++ /** ++ * Called at each HSL color value of a property. ++@@ -92,7 +125,10 @@ public: ++ * @param sat saturation ++ * @param light lightness ++ */ ++- void hsl(uint8_t hue, uint8_t sat, uint8_t light) {} +++ void hsl(uint8_t hue, uint8_t sat, uint8_t light) +++ { +++ (void)hue; (void)sat; (void)light; +++ } ++ ++ /** ++ * Called at each HSL color value of a property with alpha transparency ++@@ -103,7 +139,10 @@ public: ++ * @param light lightness ++ * @param alpha alpha value ++ */ ++- void hsla(uint8_t hue, uint8_t sat, uint8_t light, double alpha) {} +++ void hsla(uint8_t hue, uint8_t sat, uint8_t light, double alpha) +++ { +++ (void)hue; (void)sat; (void)light; (void)alpha; +++ } ++ ++ /** ++ * Called at each URL value of a property. ++@@ -111,7 +150,10 @@ public: ++ * @param p pointer to the char-array containing the URL value string. ++ * @param n length of the URL value string. ++ */ ++- void url(const char* p, size_t n) {} +++ void url(const char* p, size_t n) +++ { +++ (void)p; (void)n; +++ } ++ ++ /** ++ * Called when the parsing begins. ++diff --git a/include/orcus/csv_parser.hpp b/include/orcus/csv_parser.hpp ++index a873b0f2..27b4f924 100644 ++--- a/include/orcus/csv_parser.hpp +++++ b/include/orcus/csv_parser.hpp ++@@ -47,7 +47,10 @@ public: ++ * the text content is guaranteed to be valid so long as ++ * the original CSV stream content is valid. ++ */ ++- void cell(const char* p, size_t n, bool transient) {} +++ void cell(const char* p, size_t n, bool transient) +++ { +++ (void)p; (void)n; (void)transient; +++ } ++ }; ++ ++ template ++diff --git a/include/orcus/json_parser.hpp b/include/orcus/json_parser.hpp ++index 51a3d7cc..ef22b3a8 100644 ++--- a/include/orcus/json_parser.hpp +++++ b/include/orcus/json_parser.hpp ++@@ -54,7 +54,10 @@ public: ++ * pointer points to somewhere in the JSON stream being ++ * parsed. ++ */ ++- void object_key(const char* p, size_t len, bool transient) {} +++ void object_key(const char* p, size_t len, bool transient) +++ { +++ (void)p; (void)len; (void)transient; +++ } ++ ++ /** ++ * Called when the closing curly brace of an object is encountered. ++@@ -87,14 +90,20 @@ public: ++ * pointer points to somewhere in the JSON stream being ++ * parsed. ++ */ ++- void string(const char* p, size_t len, bool transient) {} +++ void string(const char* p, size_t len, bool transient) +++ { +++ (void)p; (void)len; (void)transient; +++ } ++ ++ /** ++ * Called when a numeric value is encountered. ++ * ++ * @param val numeric value. ++ */ ++- void number(double val) {} +++ void number(double val) +++ { +++ (void)val; +++ } ++ }; ++ ++ /** ++diff --git a/include/orcus/sax_parser.hpp b/include/orcus/sax_parser.hpp ++index 73c17d06..3b21bfdf 100644 ++--- a/include/orcus/sax_parser.hpp +++++ b/include/orcus/sax_parser.hpp ++@@ -30,7 +30,10 @@ public: ++ * ++ * @param param struct containing doctype declaration data. ++ */ ++- void doctype(const orcus::sax::doctype_declaration& param) {} +++ void doctype(const orcus::sax::doctype_declaration& param) +++ { +++ (void)param; +++ } ++ ++ /** ++ * Called when <?... is encountered, where the '...' may be an ++@@ -39,28 +42,40 @@ public: ++ * ++ * @param decl name of the identifier. ++ */ ++- void start_declaration(const orcus::pstring& decl) {} +++ void start_declaration(const orcus::pstring& decl) +++ { +++ (void)decl; +++ } ++ ++ /** ++ * Called when the closing tag (>) of a <?... ?> is encountered. ++ * ++ * @param decl name of the identifier. ++ */ ++- void end_declaration(const orcus::pstring& decl) {} +++ void end_declaration(const orcus::pstring& decl) +++ { +++ (void)decl; +++ } ++ ++ /** ++ * Called at the start of each element. ++ * ++ * @param elem information of the element being parsed. ++ */ ++- void start_element(const orcus::sax::parser_element& elem) {} +++ void start_element(const orcus::sax::parser_element& elem) +++ { +++ (void)elem; +++ } ++ ++ /** ++ * Called at the end of each element. ++ * ++ * @param elem information of the element being parsed. ++ */ ++- void end_element(const orcus::sax::parser_element& elem) {} +++ void end_element(const orcus::sax::parser_element& elem) +++ { +++ (void)elem; +++ } ++ ++ /** ++ * Called when a segment of a text content is parsed. Each text content ++@@ -76,7 +91,10 @@ public: ++ * a non-text value or be interned within the scope of ++ * the callback. ++ */ ++- void characters(const orcus::pstring& val, bool transient) {} +++ void characters(const orcus::pstring& val, bool transient) +++ { +++ (void)val; (void)transient; +++ } ++ ++ /** ++ * Called upon parsing of an attribute of an element. Note that when ++@@ -86,7 +104,10 @@ public: ++ * ++ * @param attr struct containing attribute information. ++ */ ++- void attribute(const orcus::sax::parser_attribute& attr) {} +++ void attribute(const orcus::sax::parser_attribute& attr) +++ { +++ (void)attr; +++ } ++ }; ++ ++ /** ++diff --git a/include/orcus/sax_token_parser.hpp b/include/orcus/sax_token_parser.hpp ++index 1452bc27..6b1b1de4 100644 ++--- a/include/orcus/sax_token_parser.hpp +++++ b/include/orcus/sax_token_parser.hpp ++@@ -71,7 +71,10 @@ public: ++ * ++ * @param decl struct containing the attributes of the XML declaration. ++ */ ++- void declaration(const orcus::xml_declaration_t& decl) {} +++ void declaration(const orcus::xml_declaration_t& decl) +++ { +++ (void)decl; +++ } ++ ++ /** ++ * Called at the start of each element. ++@@ -79,7 +82,10 @@ public: ++ * @param elem struct containing the element's information as well as all ++ * the attributes that belong to the element. ++ */ ++- void start_element(const orcus::xml_token_element_t& elem) {} +++ void start_element(const orcus::xml_token_element_t& elem) +++ { +++ (void)elem; +++ } ++ ++ /** ++ * Called at the end of each element. ++@@ -87,7 +93,10 @@ public: ++ * @param elem struct containing the element's information as well as all ++ * the attributes that belong to the element. ++ */ ++- void end_element(const orcus::xml_token_element_t& elem) {} +++ void end_element(const orcus::xml_token_element_t& elem) +++ { +++ (void)elem; +++ } ++ ++ /** ++ * Called when a segment of a text content is parsed. Each text content ++@@ -103,7 +112,10 @@ public: ++ * a non-text value or be interned within the scope of ++ * the callback. ++ */ ++- void characters(const orcus::pstring& val, bool transient) {} +++ void characters(const orcus::pstring& val, bool transient) +++ { +++ (void)val; (void)transient; +++ } ++ }; ++ ++ /** ++diff --git a/include/orcus/yaml_parser.hpp b/include/orcus/yaml_parser.hpp ++index 797ebbec..8d16fbc7 100644 ++--- a/include/orcus/yaml_parser.hpp +++++ b/include/orcus/yaml_parser.hpp ++@@ -72,14 +72,20 @@ public: ++ * @param p pointer to the first character of the string value. ++ * @param len length of the string value. ++ */ ++- void string(const char* p, size_t n) {} +++ void string(const char* p, size_t n) +++ { +++ (void)p; (void)n; +++ } ++ ++ /** ++ * Called when a numeric value is encountered. ++ * ++ * @param val numeric value. ++ */ ++- void number(double val) {} +++ void number(double val) +++ { +++ (void)val; +++ } ++ ++ /** ++ * Called when a boolean 'true' keyword is encountered. ++-- ++2.25.1 ++ +diff --git a/external/liborcus/ExternalPackage_liborcus.mk b/external/liborcus/ExternalPackage_liborcus.mk +index 21dd1bfb1ce5..747691809d2e 100644 +--- a/external/liborcus/ExternalPackage_liborcus.mk ++++ b/external/liborcus/ExternalPackage_liborcus.mk +@@ -12,11 +12,11 @@ $(eval $(call gb_ExternalPackage_ExternalPackage,liborcus,liborcus)) + $(eval $(call gb_ExternalPackage_use_external_project,liborcus,liborcus)) + + ifeq ($(OS),MACOSX) +-$(eval $(call gb_ExternalPackage_add_file,liborcus,$(LIBO_LIB_FOLDER)/liborcus-0.15.0.dylib,src/liborcus/.libs/liborcus-0.15.0.dylib)) +-$(eval $(call gb_ExternalPackage_add_file,liborcus,$(LIBO_LIB_FOLDER)/liborcus-parser-0.15.0.dylib,src/parser/.libs/liborcus-parser-0.15.0.dylib)) ++$(eval $(call gb_ExternalPackage_add_file,liborcus,$(LIBO_LIB_FOLDER)/liborcus-0.16.0.dylib,src/liborcus/.libs/liborcus-0.16.0.dylib)) ++$(eval $(call gb_ExternalPackage_add_file,liborcus,$(LIBO_LIB_FOLDER)/liborcus-parser-0.16.0.dylib,src/parser/.libs/liborcus-parser-0.16.0.dylib)) + else ifeq ($(DISABLE_DYNLOADING),) +-$(eval $(call gb_ExternalPackage_add_file,liborcus,$(LIBO_LIB_FOLDER)/liborcus-0.15.so.0,src/liborcus/.libs/liborcus-0.15.so.0.0.0)) +-$(eval $(call gb_ExternalPackage_add_file,liborcus,$(LIBO_LIB_FOLDER)/liborcus-parser-0.15.so.0,src/parser/.libs/liborcus-parser-0.15.so.0.0.0)) ++$(eval $(call gb_ExternalPackage_add_file,liborcus,$(LIBO_LIB_FOLDER)/liborcus-0.16.so.0,src/liborcus/.libs/liborcus-0.16.so.0.0.0)) ++$(eval $(call gb_ExternalPackage_add_file,liborcus,$(LIBO_LIB_FOLDER)/liborcus-parser-0.16.so.0,src/parser/.libs/liborcus-parser-0.16.so.0.0.0)) + endif + + # vim: set noet sw=4 ts=4: +diff --git a/external/liborcus/ExternalProject_liborcus.mk b/external/liborcus/ExternalProject_liborcus.mk +index 136fa538397e..c2a8cdcbe4a3 100644 +--- a/external/liborcus/ExternalProject_liborcus.mk ++++ b/external/liborcus/ExternalProject_liborcus.mk +@@ -123,8 +123,8 @@ $(call gb_ExternalProject_get_state_target,liborcus,build) : + $(MAKE) \ + $(if $(filter MACOSX,$(OS)),\ + && $(PERL) $(SRCDIR)/solenv/bin/macosx-change-install-names.pl shl OOO \ +- $(EXTERNAL_WORKDIR)/src/liborcus/.libs/liborcus-0.15.0.dylib \ +- $(EXTERNAL_WORKDIR)/src/parser/.libs/liborcus-parser-0.15.0.dylib \ ++ $(EXTERNAL_WORKDIR)/src/liborcus/.libs/liborcus-0.16.0.dylib \ ++ $(EXTERNAL_WORKDIR)/src/parser/.libs/liborcus-parser-0.16.0.dylib \ + ) \ + ) + $(call gb_Trace_EndRange,liborcus,EXTERNAL) +diff --git a/external/liborcus/Library_orcus-parser.mk b/external/liborcus/Library_orcus-parser.mk +index d3cbddbb8cec..4e46591b98fe 100644 +--- a/external/liborcus/Library_orcus-parser.mk ++++ b/external/liborcus/Library_orcus-parser.mk +@@ -63,6 +63,7 @@ $(eval $(call gb_Library_add_generated_exception_objects,orcus-parser,\ + UnpackedTarball/liborcus/src/parser/tokens \ + UnpackedTarball/liborcus/src/parser/types \ + UnpackedTarball/liborcus/src/parser/xml_namespace \ ++ UnpackedTarball/liborcus/src/parser/xml_writer \ + UnpackedTarball/liborcus/src/parser/yaml_parser_base \ + UnpackedTarball/liborcus/src/parser/zip_archive \ + UnpackedTarball/liborcus/src/parser/zip_archive_stream \ +diff --git a/external/liborcus/Library_orcus.mk b/external/liborcus/Library_orcus.mk +index ea99e7509fbf..0a0ca582882a 100644 +--- a/external/liborcus/Library_orcus.mk ++++ b/external/liborcus/Library_orcus.mk +@@ -85,6 +85,7 @@ $(eval $(call gb_Library_add_generated_exception_objects,orcus,\ + UnpackedTarball/liborcus/src/liborcus/odf_tokens \ + UnpackedTarball/liborcus/src/liborcus/ods_content_xml_context \ + UnpackedTarball/liborcus/src/liborcus/ods_content_xml_handler \ ++ UnpackedTarball/liborcus/src/liborcus/ods_dde_links_context \ + UnpackedTarball/liborcus/src/liborcus/ods_session_data \ + UnpackedTarball/liborcus/src/liborcus/ooxml_content_types \ + UnpackedTarball/liborcus/src/liborcus/ooxml_global \ +@@ -103,6 +104,7 @@ $(eval $(call gb_Library_add_generated_exception_objects,orcus,\ + UnpackedTarball/liborcus/src/liborcus/orcus_xls_xml \ + UnpackedTarball/liborcus/src/liborcus/orcus_xlsx \ + UnpackedTarball/liborcus/src/liborcus/orcus_xml \ ++ UnpackedTarball/liborcus/src/liborcus/orcus_xml_impl \ + UnpackedTarball/liborcus/src/liborcus/orcus_xml_map_def \ + UnpackedTarball/liborcus/src/liborcus/session_context \ + UnpackedTarball/liborcus/src/liborcus/spreadsheet_iface_util \ +@@ -134,7 +136,9 @@ $(eval $(call gb_Library_add_generated_exception_objects,orcus,\ + UnpackedTarball/liborcus/src/liborcus/xml_simple_stream_handler \ + UnpackedTarball/liborcus/src/liborcus/xml_stream_handler \ + UnpackedTarball/liborcus/src/liborcus/xml_stream_parser \ ++ UnpackedTarball/liborcus/src/liborcus/xml_structure_mapper \ + UnpackedTarball/liborcus/src/liborcus/xml_structure_tree \ ++ UnpackedTarball/liborcus/src/liborcus/xpath_parser \ + UnpackedTarball/liborcus/src/liborcus/yaml_document_tree \ + )) + +diff --git a/external/liborcus/UnpackedTarball_liborcus.mk b/external/liborcus/UnpackedTarball_liborcus.mk +index e5e33b0b1249..4736dbccab4b 100644 +--- a/external/liborcus/UnpackedTarball_liborcus.mk ++++ b/external/liborcus/UnpackedTarball_liborcus.mk +@@ -20,6 +20,7 @@ $(eval $(call gb_UnpackedTarball_add_patches,liborcus,\ + external/liborcus/gcc9.patch.0 \ + external/liborcus/libtool.patch.0 \ + external/liborcus/fix-pch.patch.0 \ ++ external/liborcus/0001-Mark-all-untentionally-unused-variables.patch \ + )) + + ifeq ($(OS),WNT) +diff --git a/external/liborcus/libtool.patch.0 b/external/liborcus/libtool.patch.0 +index aa6ffa908ec3..663dbd8099d7 100644 +--- a/external/liborcus/libtool.patch.0 ++++ b/external/liborcus/libtool.patch.0 +@@ -1,11 +1,11 @@ +---- ltmain.sh.sav 2018-09-14 23:47:13.000000000 +0200 +-+++ ltmain.sh 2019-05-05 23:11:30.406904472 +0200 +-@@ -7278,7 +7278,7 @@ func_mode_link () ++--- ltmain.sh.orig 2020-09-09 21:20:23.069433984 -0400 +++++ ltmain.sh 2020-09-09 21:27:13.168073996 -0400 ++@@ -7373,7 +7373,7 @@ + -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ + -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ + -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ +-- -specs=*|-fsanitize=*) +-+ -specs=*|-fsanitize=*|-fuse-ld=*) ++- -specs=*|-fsanitize=*|-fuse-ld=*|-static-*|-fcilkplus) +++ -specs=*|-fsanitize=*|-fuse-ld=*|-static-*|-fcilkplus) + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + func_append compile_command " $arg" +diff --git a/external/liborcus/windows-constants-hack.patch b/external/liborcus/windows-constants-hack.patch +index 876bc1688a31..51aabfa1fb47 100644 +--- a/external/liborcus/windows-constants-hack.patch ++++ b/external/liborcus/windows-constants-hack.patch +@@ -8,7 +8,7 @@ index ae571f5..539ce18 100644 + + -#include "constants.inl" + +#define ORCUS_MAJOR_VERSION 0 +-+#define ORCUS_MINOR_VERSION 11 +++#define ORCUS_MINOR_VERSION 16 + +#define ORCUS_MICRO_VERSION 0 + + namespace orcus { +diff --git a/sc/source/filter/inc/orcusinterface.hxx b/sc/source/filter/inc/orcusinterface.hxx +index b298c711d234..00aea6764957 100644 +--- a/sc/source/filter/inc/orcusinterface.hxx ++++ b/sc/source/filter/inc/orcusinterface.hxx +@@ -62,6 +62,11 @@ public: + { + return mnTextEncoding; + } ++ ++ ScDocumentImport& getDoc() const ++ { ++ return mrDoc; ++ } + }; + + class ScOrcusRefResolver : public orcus::spreadsheet::iface::import_reference_resolver +@@ -71,20 +76,28 @@ class ScOrcusRefResolver : public orcus::spreadsheet::iface::import_reference_re + public: + ScOrcusRefResolver( const ScOrcusGlobalSettings& rGS ); + +- orcus::spreadsheet::address_t resolve_address(const char* p, size_t n) override; +- orcus::spreadsheet::range_t resolve_range(const char* p, size_t n) override; ++ orcus::spreadsheet::src_address_t resolve_address(const char* p, size_t n) override; ++ orcus::spreadsheet::src_range_t resolve_range(const char* p, size_t n) override; + }; + + class ScOrcusNamedExpression : public orcus::spreadsheet::iface::import_named_expression + { + ScDocumentImport& mrDoc; + const ScOrcusGlobalSettings& mrGlobalSettings; +- SCTAB mnTab; //< negative if global, else >= 0 for sheet-local named expressions. ++ ScAddress maBasePos; ++ OUString maName; ++ OUString maExpr; ++ const SCTAB mnTab; //< negative if global, else >= 0 for sheet-local named expressions. + + public: + ScOrcusNamedExpression( ScDocumentImport& rDoc, const ScOrcusGlobalSettings& rGS, SCTAB nTab = -1 ); + +- virtual void define_name(const char* p_name, size_t n_name, const char* p_exp, size_t n_exp) override; ++ void reset(); ++ ++ virtual void set_base_position(const orcus::spreadsheet::src_address_t& pos) override; ++ virtual void set_named_expression(const char* p_name, size_t n_name, const char* p_exp, size_t n_exp) override; ++ virtual void set_named_range(const char* p_name, size_t n_name, const char* p_range, size_t n_range) override; ++ virtual void commit() override; + }; + + class ScOrcusSharedStrings : public orcus::spreadsheet::iface::import_shared_strings +diff --git a/sc/source/filter/orcus/interface.cxx b/sc/source/filter/orcus/interface.cxx +index 220f7ce057f9..aa96eb21d405 100644 +--- a/sc/source/filter/orcus/interface.cxx ++++ b/sc/source/filter/orcus/interface.cxx +@@ -46,6 +46,7 @@ + #include + + #include ++#include + + using namespace com::sun::star; + +@@ -158,51 +159,54 @@ orcus::spreadsheet::formula_grammar_t ScOrcusGlobalSettings::get_default_formula + ScOrcusRefResolver::ScOrcusRefResolver( const ScOrcusGlobalSettings& rGS ) : + mrGlobalSettings(rGS) {} + +-os::address_t ScOrcusRefResolver::resolve_address(const char* p, size_t n) ++os::src_address_t ScOrcusRefResolver::resolve_address(const char* p, size_t n) + { + OUString aStr(p, n, mrGlobalSettings.getTextEncoding()); + + ScAddress aAddr; +- aAddr.Parse(aStr, nullptr, ++ aAddr.Parse(aStr, &mrGlobalSettings.getDoc().getDoc(), + formula::FormulaGrammar::extractRefConvention( + mrGlobalSettings.getCalcGrammar())); + +- os::address_t ret; +- ret.column = 0; +- ret.row = 0; +- +- if (aAddr.IsValid()) ++ if (!aAddr.IsValid()) + { +- ret.column = aAddr.Col(); +- ret.row = aAddr.Row(); ++ std::ostringstream os; ++ os << "'" << std::string(p, n) << "' is not a valid address expression."; ++ throw orcus::invalid_arg_error(os.str()); + } + ++ os::src_address_t ret; ++ ret.sheet = aAddr.Tab(); ++ ret.column = aAddr.Col(); ++ ret.row = aAddr.Row(); ++ + return ret; + } + +-os::range_t ScOrcusRefResolver::resolve_range(const char* p, size_t n) ++os::src_range_t ScOrcusRefResolver::resolve_range(const char* p, size_t n) + { + OUString aStr(p, n, mrGlobalSettings.getTextEncoding()); + + ScRange aRange; +- aRange.Parse(aStr, nullptr, ++ aRange.Parse(aStr, &mrGlobalSettings.getDoc().getDoc(), + formula::FormulaGrammar::extractRefConvention( + mrGlobalSettings.getCalcGrammar())); + +- os::range_t ret; +- ret.first.column = 0; +- ret.first.row = 0; +- ret.last.column = 0; +- ret.last.row = 0; +- +- if (aRange.IsValid()) ++ if (!aRange.IsValid()) + { +- ret.first.column = aRange.aStart.Col(); +- ret.first.row = aRange.aStart.Row(); +- ret.last.column = aRange.aEnd.Col(); +- ret.last.row = aRange.aEnd.Row(); ++ std::ostringstream os; ++ os << "'" << std::string(p, n) << "' is not a valid range expression."; ++ throw orcus::invalid_arg_error(os.str()); + } + ++ os::src_range_t ret; ++ ret.first.sheet = aRange.aStart.Tab(); ++ ret.first.column = aRange.aStart.Col(); ++ ret.first.row = aRange.aStart.Row(); ++ ret.last.sheet = aRange.aEnd.Tab(); ++ ret.last.column = aRange.aEnd.Col(); ++ ret.last.row = aRange.aEnd.Row(); ++ + return ret; + } + +@@ -210,20 +214,46 @@ ScOrcusNamedExpression::ScOrcusNamedExpression( + ScDocumentImport& rDoc, const ScOrcusGlobalSettings& rGS, SCTAB nTab ) : + mrDoc(rDoc), mrGlobalSettings(rGS), mnTab(nTab) {} + +-void ScOrcusNamedExpression::define_name(const char* p_name, size_t n_name, const char* p_exp, size_t n_exp) ++void ScOrcusNamedExpression::reset() ++{ ++ maBasePos.SetTab(0); ++ maBasePos.SetCol(0); ++ maBasePos.SetRow(0); ++ maName.clear(); ++ maExpr.clear(); ++} ++ ++void ScOrcusNamedExpression::set_base_position(const orcus::spreadsheet::src_address_t& pos) ++{ ++ maBasePos.SetTab(pos.sheet); ++ maBasePos.SetCol(pos.column); ++ maBasePos.SetRow(pos.row); ++} ++ ++void ScOrcusNamedExpression::set_named_expression(const char* p_name, size_t n_name, const char* p_exp, size_t n_exp) ++{ ++ maName = OUString(p_name, n_name, mrGlobalSettings.getTextEncoding()); ++ maExpr = OUString(p_exp, n_exp, mrGlobalSettings.getTextEncoding()); ++} ++ ++void ScOrcusNamedExpression::set_named_range(const char* /*p_name*/, size_t /*n_name*/, const char* /*p_range*/, size_t /*n_range*/) + { +- OUString aName(p_name, n_name, mrGlobalSettings.getTextEncoding()); +- OUString aExpr(p_exp, n_exp, mrGlobalSettings.getTextEncoding()); ++ throw std::runtime_error("ScOrcusNamedExpression::set_named_range not implemented yet."); ++} + ++void ScOrcusNamedExpression::commit() ++{ + ScRangeName* pNames = mnTab >= 0 ? mrDoc.getDoc().GetRangeName(mnTab) : mrDoc.getDoc().GetRangeName(); + if (!pNames) + return; + + ScRangeData* pRange = new ScRangeData( +- &mrDoc.getDoc(), aName, aExpr, ScAddress(), ScRangeData::Type::Name, ++ &mrDoc.getDoc(), maName, maExpr, maBasePos, ScRangeData::Type::Name, + mrGlobalSettings.getCalcGrammar()); + + pNames->insert(pRange, false); ++ ++ reset(); // make sure to reset the state for the next run. + } + + ScOrcusFactory::CellStoreToken::CellStoreToken(const ScAddress& rPos, Type eType) +diff --git a/sc/source/filter/orcus/xmlcontext.cxx b/sc/source/filter/orcus/xmlcontext.cxx +index f886dd555a66..1f3ee58220a0 100644 +--- a/sc/source/filter/orcus/xmlcontext.cxx ++++ b/sc/source/filter/orcus/xmlcontext.cxx +@@ -89,10 +89,9 @@ void populateTree( + rTreeCtrl.set_image(*xEntry, rParam.maImgElementRepeat, -1); + } + +- orcus::xml_structure_tree::entity_names_type aNames; ++ orcus::xml_structure_tree::entity_names_type aNames = rWalker.get_attributes(); + + // Insert attributes. +- rWalker.get_attributes(aNames); + for (const orcus::xml_structure_tree::entity_name& rAttrName : aNames) + { + OUString sAttr(toString(rAttrName, rWalker)); +@@ -106,7 +105,7 @@ void populateTree( + rTreeCtrl.set_image(*xAttr, rParam.maImgAttribute, -1); + } + +- rWalker.get_children(aNames); ++ aNames = rWalker.get_children(); + + // Non-leaf if it has child elements, leaf otherwise. + rEntryData.mbLeafNode = aNames.empty(); +@@ -266,7 +265,7 @@ void ScOrcusXMLContextImpl::importXML(const ScOrcusImportXMLParam& rParam) + std::for_each(rLink.maFieldPaths.begin(), rLink.maFieldPaths.end(), + [&filter](const OString& rFieldPath) + { +- filter.append_field_link(rFieldPath.getStr()); ++ filter.append_field_link(rFieldPath.getStr(), orcus::pstring()); + } + ); + +diff --git a/sc/source/ui/xmlsource/xmlsourcedlg.cxx b/sc/source/ui/xmlsource/xmlsourcedlg.cxx +index 1eb2e4b06077..167ecae315ae 100644 +--- a/sc/source/ui/xmlsource/xmlsourcedlg.cxx ++++ b/sc/source/ui/xmlsource/xmlsourcedlg.cxx +@@ -49,8 +49,12 @@ OUString getXPath( + if (pData) + rNamespaces.push_back(pData->mnNamespaceID); + ++ // element separator is '/' whereas attribute separator is '/@' in xpath. + aBuf.insert(0, rTree.get_text(*xEntry, 0)); +- aBuf.insert(0, isAttribute(rTree, *xEntry) ? '@' : '/'); ++ if (isAttribute(rTree, *xEntry)) ++ aBuf.insert(0, "/@"); ++ else ++ aBuf.insert(0, '/'); + } + while (rTree.iter_parent(*xEntry)); + +-- +cgit v1.2.1 + +From 1821dde6601193cc0ddf87fc020de708544d9700 Mon Sep 17 00:00:00 2001 +From: Kohei Yoshida +Date: Mon, 28 Sep 2020 16:19:54 -0400 +Subject: Update liborcus to 0.16.1. + +Change-Id: I27e87278545c1d41381b1ab8a49f6f6a07681bfb +Reviewed-on: https://gerrit.libreoffice.org/c/core/+/103590 +Tested-by: Jenkins +Reviewed-by: Kohei Yoshida +--- + download.lst | 4 +- + ...1-Mark-all-untentionally-unused-variables.patch | 376 --------------------- + external/liborcus/UnpackedTarball_liborcus.mk | 1 - + 3 files changed, 2 insertions(+), 379 deletions(-) + delete mode 100644 external/liborcus/0001-Mark-all-untentionally-unused-variables.patch + +diff --git a/download.lst b/download.lst +index a4782bb2b9ef..48af3c5e9198 100644 +--- a/download.lst ++++ b/download.lst +@@ -206,8 +206,8 @@ export OPENLDAP_SHA256SUM := cdd6cffdebcd95161a73305ec13fc7a78e9707b46ca9f84fb89 + export OPENLDAP_TARBALL := openldap-2.4.45.tgz + export OPENSSL_SHA256SUM := 14cb464efe7ac6b54799b34456bd69558a749a4931ecfd9cf9f71d7881cac7bc + export OPENSSL_TARBALL := openssl-1.0.2t.tar.gz +-export ORCUS_SHA256SUM := 854c6ec167ace59baa2984e175bac7b5b2af91bfde4bb10d2088b87a51ed76ec +-export ORCUS_TARBALL := liborcus-0.16.0.tar.bz2 ++export ORCUS_SHA256SUM := c700d1325f744104d9fca0d5a019434901e9d51a16eedfb05792f90a298587a4 ++export ORCUS_TARBALL := liborcus-0.16.1.tar.bz2 + export OWNCLOUD_ANDROID_LIB_SHA256SUM := b18b3e3ef7fae6a79b62f2bb43cc47a5346b6330f6a383dc4be34439aca5e9fb + export OWNCLOUD_ANDROID_LIB_TARBALL := owncloud-android-library-0.9.4-no-binary-deps.tar.gz + export PAGEMAKER_SHA256SUM := 66adacd705a7d19895e08eac46d1e851332adf2e736c566bef1164e7a442519d +diff --git a/external/liborcus/0001-Mark-all-untentionally-unused-variables.patch b/external/liborcus/0001-Mark-all-untentionally-unused-variables.patch +deleted file mode 100644 +index b0f6a572aff7..000000000000 +--- a/external/liborcus/0001-Mark-all-untentionally-unused-variables.patch ++++ /dev/null +@@ -1,376 +0,0 @@ +-From 6d34c41b661a9e8dddf6d08bf1f3c1fd4f5581da Mon Sep 17 00:00:00 2001 +-From: Kohei Yoshida +-Date: Fri, 11 Sep 2020 21:39:09 -0400 +-Subject: [PATCH] Mark all untentionally unused variables. +- +---- +- include/orcus/css_parser.hpp | 70 ++++++++++++++++++++++++------ +- include/orcus/csv_parser.hpp | 5 ++- +- include/orcus/json_parser.hpp | 15 +++++-- +- include/orcus/sax_parser.hpp | 35 ++++++++++++--- +- include/orcus/sax_token_parser.hpp | 20 +++++++-- +- include/orcus/yaml_parser.hpp | 10 ++++- +- 6 files changed, 124 insertions(+), 31 deletions(-) +- +-diff --git a/include/orcus/css_parser.hpp b/include/orcus/css_parser.hpp +-index cdfae5e0..3e96980b 100644 +---- a/include/orcus/css_parser.hpp +-+++ b/include/orcus/css_parser.hpp +-@@ -31,23 +31,44 @@ namespace orcus { +- class css_handler +- { +- public: +-- void at_rule_name(const char* p, size_t n) {} +-+ void at_rule_name(const char* p, size_t n) +-+ { +-+ (void)p; (void)n; +-+ } +- +-- void simple_selector_type(const char* p, size_t n) {} +-+ void simple_selector_type(const char* p, size_t n) +-+ { +-+ (void)p; (void)n; +-+ } +- +-- void simple_selector_class(const char* p, size_t n) {} +-+ void simple_selector_class(const char* p, size_t n) +-+ { +-+ (void)p; (void)n; +-+ } +- +-- void simple_selector_pseudo_element(orcus::css::pseudo_element_t pe) {} +-+ void simple_selector_pseudo_element(orcus::css::pseudo_element_t pe) +-+ { +-+ (void)pe; +-+ } +- +-- void simple_selector_pseudo_class(orcus::css::pseudo_class_t pc) {} +-+ void simple_selector_pseudo_class(orcus::css::pseudo_class_t pc) +-+ { +-+ (void)pc; +-+ } +- +-- void simple_selector_id(const char* p, size_t n) {} +-+ void simple_selector_id(const char* p, size_t n) +-+ { +-+ (void)p; (void)n; +-+ } +- +- void end_simple_selector() {} +- +- void end_selector() {} +- +-- void combinator(orcus::css::combinator_t combinator) {} +-+ void combinator(orcus::css::combinator_t combinator) +-+ { +-+ (void)combinator; +-+ } +- +- /** +- * Called at each property name. +-@@ -55,7 +76,10 @@ public: +- * @param p pointer to the char-array containing the property name string. +- * @param n length of the property name string. +- */ +-- void property_name(const char* p, size_t n) {} +-+ void property_name(const char* p, size_t n) +-+ { +-+ (void)p; (void)n; +-+ } +- +- /** +- * Called at each ordinary property value string. +-@@ -63,7 +87,10 @@ public: +- * @param p pointer to the char-array containing the value string. +- * @param n length of the value string. +- */ +-- void value(const char* p, size_t n) {} +-+ void value(const char* p, size_t n) +-+ { +-+ (void)p; (void)n; +-+ } +- +- /** +- * Called at each RGB color value of a property. +-@@ -72,7 +99,10 @@ public: +- * @param green value of green (0-255) +- * @param blue value of blue (0-255) +- */ +-- void rgb(uint8_t red, uint8_t green, uint8_t blue) {} +-+ void rgb(uint8_t red, uint8_t green, uint8_t blue) +-+ { +-+ (void)red; (void)green; (void)blue; +-+ } +- +- /** +- * Called at each RGB color value of a property with alpha transparency +-@@ -83,7 +113,10 @@ public: +- * @param blue value of blue (0-255) +- * @param alpha alpha transparency value +- */ +-- void rgba(uint8_t red, uint8_t green, uint8_t blue, double alpha) {} +-+ void rgba(uint8_t red, uint8_t green, uint8_t blue, double alpha) +-+ { +-+ (void)red; (void)green; (void)blue; (void)alpha; +-+ } +- +- /** +- * Called at each HSL color value of a property. +-@@ -92,7 +125,10 @@ public: +- * @param sat saturation +- * @param light lightness +- */ +-- void hsl(uint8_t hue, uint8_t sat, uint8_t light) {} +-+ void hsl(uint8_t hue, uint8_t sat, uint8_t light) +-+ { +-+ (void)hue; (void)sat; (void)light; +-+ } +- +- /** +- * Called at each HSL color value of a property with alpha transparency +-@@ -103,7 +139,10 @@ public: +- * @param light lightness +- * @param alpha alpha value +- */ +-- void hsla(uint8_t hue, uint8_t sat, uint8_t light, double alpha) {} +-+ void hsla(uint8_t hue, uint8_t sat, uint8_t light, double alpha) +-+ { +-+ (void)hue; (void)sat; (void)light; (void)alpha; +-+ } +- +- /** +- * Called at each URL value of a property. +-@@ -111,7 +150,10 @@ public: +- * @param p pointer to the char-array containing the URL value string. +- * @param n length of the URL value string. +- */ +-- void url(const char* p, size_t n) {} +-+ void url(const char* p, size_t n) +-+ { +-+ (void)p; (void)n; +-+ } +- +- /** +- * Called when the parsing begins. +-diff --git a/include/orcus/csv_parser.hpp b/include/orcus/csv_parser.hpp +-index a873b0f2..27b4f924 100644 +---- a/include/orcus/csv_parser.hpp +-+++ b/include/orcus/csv_parser.hpp +-@@ -47,7 +47,10 @@ public: +- * the text content is guaranteed to be valid so long as +- * the original CSV stream content is valid. +- */ +-- void cell(const char* p, size_t n, bool transient) {} +-+ void cell(const char* p, size_t n, bool transient) +-+ { +-+ (void)p; (void)n; (void)transient; +-+ } +- }; +- +- template +-diff --git a/include/orcus/json_parser.hpp b/include/orcus/json_parser.hpp +-index 51a3d7cc..ef22b3a8 100644 +---- a/include/orcus/json_parser.hpp +-+++ b/include/orcus/json_parser.hpp +-@@ -54,7 +54,10 @@ public: +- * pointer points to somewhere in the JSON stream being +- * parsed. +- */ +-- void object_key(const char* p, size_t len, bool transient) {} +-+ void object_key(const char* p, size_t len, bool transient) +-+ { +-+ (void)p; (void)len; (void)transient; +-+ } +- +- /** +- * Called when the closing curly brace of an object is encountered. +-@@ -87,14 +90,20 @@ public: +- * pointer points to somewhere in the JSON stream being +- * parsed. +- */ +-- void string(const char* p, size_t len, bool transient) {} +-+ void string(const char* p, size_t len, bool transient) +-+ { +-+ (void)p; (void)len; (void)transient; +-+ } +- +- /** +- * Called when a numeric value is encountered. +- * +- * @param val numeric value. +- */ +-- void number(double val) {} +-+ void number(double val) +-+ { +-+ (void)val; +-+ } +- }; +- +- /** +-diff --git a/include/orcus/sax_parser.hpp b/include/orcus/sax_parser.hpp +-index 73c17d06..3b21bfdf 100644 +---- a/include/orcus/sax_parser.hpp +-+++ b/include/orcus/sax_parser.hpp +-@@ -30,7 +30,10 @@ public: +- * +- * @param param struct containing doctype declaration data. +- */ +-- void doctype(const orcus::sax::doctype_declaration& param) {} +-+ void doctype(const orcus::sax::doctype_declaration& param) +-+ { +-+ (void)param; +-+ } +- +- /** +- * Called when <?... is encountered, where the '...' may be an +-@@ -39,28 +42,40 @@ public: +- * +- * @param decl name of the identifier. +- */ +-- void start_declaration(const orcus::pstring& decl) {} +-+ void start_declaration(const orcus::pstring& decl) +-+ { +-+ (void)decl; +-+ } +- +- /** +- * Called when the closing tag (>) of a <?... ?> is encountered. +- * +- * @param decl name of the identifier. +- */ +-- void end_declaration(const orcus::pstring& decl) {} +-+ void end_declaration(const orcus::pstring& decl) +-+ { +-+ (void)decl; +-+ } +- +- /** +- * Called at the start of each element. +- * +- * @param elem information of the element being parsed. +- */ +-- void start_element(const orcus::sax::parser_element& elem) {} +-+ void start_element(const orcus::sax::parser_element& elem) +-+ { +-+ (void)elem; +-+ } +- +- /** +- * Called at the end of each element. +- * +- * @param elem information of the element being parsed. +- */ +-- void end_element(const orcus::sax::parser_element& elem) {} +-+ void end_element(const orcus::sax::parser_element& elem) +-+ { +-+ (void)elem; +-+ } +- +- /** +- * Called when a segment of a text content is parsed. Each text content +-@@ -76,7 +91,10 @@ public: +- * a non-text value or be interned within the scope of +- * the callback. +- */ +-- void characters(const orcus::pstring& val, bool transient) {} +-+ void characters(const orcus::pstring& val, bool transient) +-+ { +-+ (void)val; (void)transient; +-+ } +- +- /** +- * Called upon parsing of an attribute of an element. Note that when +-@@ -86,7 +104,10 @@ public: +- * +- * @param attr struct containing attribute information. +- */ +-- void attribute(const orcus::sax::parser_attribute& attr) {} +-+ void attribute(const orcus::sax::parser_attribute& attr) +-+ { +-+ (void)attr; +-+ } +- }; +- +- /** +-diff --git a/include/orcus/sax_token_parser.hpp b/include/orcus/sax_token_parser.hpp +-index 1452bc27..6b1b1de4 100644 +---- a/include/orcus/sax_token_parser.hpp +-+++ b/include/orcus/sax_token_parser.hpp +-@@ -71,7 +71,10 @@ public: +- * +- * @param decl struct containing the attributes of the XML declaration. +- */ +-- void declaration(const orcus::xml_declaration_t& decl) {} +-+ void declaration(const orcus::xml_declaration_t& decl) +-+ { +-+ (void)decl; +-+ } +- +- /** +- * Called at the start of each element. +-@@ -79,7 +82,10 @@ public: +- * @param elem struct containing the element's information as well as all +- * the attributes that belong to the element. +- */ +-- void start_element(const orcus::xml_token_element_t& elem) {} +-+ void start_element(const orcus::xml_token_element_t& elem) +-+ { +-+ (void)elem; +-+ } +- +- /** +- * Called at the end of each element. +-@@ -87,7 +93,10 @@ public: +- * @param elem struct containing the element's information as well as all +- * the attributes that belong to the element. +- */ +-- void end_element(const orcus::xml_token_element_t& elem) {} +-+ void end_element(const orcus::xml_token_element_t& elem) +-+ { +-+ (void)elem; +-+ } +- +- /** +- * Called when a segment of a text content is parsed. Each text content +-@@ -103,7 +112,10 @@ public: +- * a non-text value or be interned within the scope of +- * the callback. +- */ +-- void characters(const orcus::pstring& val, bool transient) {} +-+ void characters(const orcus::pstring& val, bool transient) +-+ { +-+ (void)val; (void)transient; +-+ } +- }; +- +- /** +-diff --git a/include/orcus/yaml_parser.hpp b/include/orcus/yaml_parser.hpp +-index 797ebbec..8d16fbc7 100644 +---- a/include/orcus/yaml_parser.hpp +-+++ b/include/orcus/yaml_parser.hpp +-@@ -72,14 +72,20 @@ public: +- * @param p pointer to the first character of the string value. +- * @param len length of the string value. +- */ +-- void string(const char* p, size_t n) {} +-+ void string(const char* p, size_t n) +-+ { +-+ (void)p; (void)n; +-+ } +- +- /** +- * Called when a numeric value is encountered. +- * +- * @param val numeric value. +- */ +-- void number(double val) {} +-+ void number(double val) +-+ { +-+ (void)val; +-+ } +- +- /** +- * Called when a boolean 'true' keyword is encountered. +--- +-2.25.1 +- +diff --git a/external/liborcus/UnpackedTarball_liborcus.mk b/external/liborcus/UnpackedTarball_liborcus.mk +index 4736dbccab4b..e5e33b0b1249 100644 +--- a/external/liborcus/UnpackedTarball_liborcus.mk ++++ b/external/liborcus/UnpackedTarball_liborcus.mk +@@ -20,7 +20,6 @@ $(eval $(call gb_UnpackedTarball_add_patches,liborcus,\ + external/liborcus/gcc9.patch.0 \ + external/liborcus/libtool.patch.0 \ + external/liborcus/fix-pch.patch.0 \ +- external/liborcus/0001-Mark-all-untentionally-unused-variables.patch \ + )) + + ifeq ($(OS),WNT) +-- +cgit v1.2.1 + diff --git a/debian/patches/make-package-modules-not-suck.diff b/debian/patches/make-package-modules-not-suck.diff new file mode 100644 index 00000000000..2f29277ec58 --- /dev/null +++ b/debian/patches/make-package-modules-not-suck.diff @@ -0,0 +1,200 @@ +diff --git a/scp2/InstallModule_draw.mk b/scp2/InstallModule_draw.mk +index a7c02be..d48edf2 100644 +--- a/scp2/InstallModule_draw.mk ++++ b/scp2/InstallModule_draw.mk +@@ -10,6 +10,7 @@ + $(eval $(call gb_InstallModule_InstallModule,scp2/draw)) + + $(eval $(call gb_InstallModule_use_auto_install_libs,scp2/draw,\ ++ draw \ + draw_brand \ + )) + +diff --git a/scp2/source/draw/module_draw.scp b/scp2/source/draw/module_draw.scp +index 8737579..0913c61 100644 +--- a/scp2/source/draw/module_draw.scp ++++ b/scp2/source/draw/module_draw.scp +@@ -18,6 +18,7 @@ + + #include "macros.inc" + ++#include "AutoInstall/draw" + #include "AutoInstall/draw_brand" + + Module gid_Module_Prg_Draw +@@ -34,7 +35,8 @@ Module gid_Module_Prg_Draw_Bin + Sortkey = "100"; + Default = YES; + Styles = (HIDDEN_ROOT); +- Files = (gid_File_Extra_Urldesktop_Draw,gid_File_Extra_Urlnew_Draw,gid_File_Extra_Urlstart_Draw,gid_File_Extra_Urltasks_Draw, ++ Files = (auto_draw_ALL, ++ gid_File_Extra_Urldesktop_Draw,gid_File_Extra_Urlnew_Draw,gid_File_Extra_Urlstart_Draw,gid_File_Extra_Urltasks_Draw, + gid_File_Share_Registry_Draw_Xcd, + gid_File_Tmp_Userinstall_Draw_Inf); + End +diff --git a/scp2/AutoInstall.mk b/scp2/AutoInstall.mk +index 7d2a347..a15ac52 100644 +--- a/scp2/AutoInstall.mk ++++ b/scp2/AutoInstall.mk +@@ -17,6 +17,7 @@ $(eval $(call gb_AutoInstall_add_module,base_brand,,LIBO_EXECUTABLE,,PACKAGE_FIL + $(eval $(call gb_AutoInstall_add_module,brand,,LIBO_EXECUTABLE,,PACKAGE_FILELIST)) + $(eval $(call gb_AutoInstall_add_module,calc,LIBO_LIB_FILE,,,PACKAGE_FILELIST)) + $(eval $(call gb_AutoInstall_add_module,calc_brand,,LIBO_EXECUTABLE,,PACKAGE_FILELIST)) ++$(eval $(call gb_AutoInstall_add_module,draw,LIBO_LIB_FILE)) + $(eval $(call gb_AutoInstall_add_module,draw_brand,,LIBO_EXECUTABLE,,PACKAGE_FILELIST)) + $(eval $(call gb_AutoInstall_add_module,extensions_ct2n,,,,PACKAGE_FILELIST)) + $(eval $(call gb_AutoInstall_add_module,extensions_bsh,,,LIBO_JAR_FILE)) +diff --git a/Repository.mk b/Repository.mk +index 36b35b7a4262..25f202cb0983 100644 +--- a/Repository.mk ++++ b/Repository.mk +@@ -245,13 +245,29 @@ $(eval $(call gb_Helper_register_executables_for_install,UREBIN,ure,\ + + $(eval $(call gb_Helper_register_libraries_for_install,OOOLIBS,base, \ + abp \ ++ calc \ ++ dba \ ++ dbahsql \ ++ $(call gb_Helper_optional,DBCONNECTIVITY, \ ++ dbase \ ++ dbaxml) \ + dbp \ + dbu \ ++ $(call gb_Helper_optional,DBCONNECTIVITY,flat) \ ++ $(if $(ENABLE_JAVA),jdbc) \ ++ $(call gb_Helper_optional,DBCONNECTIVITY,mysql_jdbc) \ ++ $(call gb_Helper_optional,MARIADBC,$(call gb_Helper_optional,DBCONNECTIVITY,mysqlc)) \ ++ odbc \ ++)) ++ ++$(eval $(call gb_Helper_register_libraries_for_install,PLAINLIBS_OOO,base, \ ++ $(call gb_Helper_optional,DBCONNECTIVITY,dbpool2) \ ++ $(if $(ENABLE_JAVA),hsqldb) \ ++ sdbc2 \ + )) + + $(eval $(call gb_Helper_register_libraries_for_install,OOOLIBS,calc, \ + analysis \ +- $(call gb_Helper_optional,DBCONNECTIVITY,calc) \ + date \ + pricing \ + sc \ +@@ -263,6 +279,14 @@ $(eval $(call gb_Helper_register_libraries_for_install,OOOLIBS,calc, \ + $(call gb_Helper_optional,SCRIPTING,vbaobj) \ + )) + ++$(eval $(call gb_Helper_register_libraries_for_install,OOOLIBS,draw, \ ++ animcore \ ++ sd \ ++ sdd \ ++ sdfilt \ ++ sdui \ ++)) ++ + $(eval $(call gb_Helper_register_libraries_for_install,OOOLIBS,graphicfilter, \ + svgfilter \ + wpftdraw \ +@@ -271,10 +295,10 @@ $(eval $(call gb_Helper_register_libraries_for_install,OOOLIBS,graphicfilter, \ + )) + + $(eval $(call gb_Helper_register_libraries_for_install,OOOLIBS,impress, \ +- animcore \ + PresenterScreen \ + PresentationMinimizer \ + wpftimpress \ ++ slideshow \ + )) + + $(eval $(call gb_Helper_register_libraries_for_install,OOOLIBS,onlineupdate, \ +@@ -349,11 +349,6 @@ $(eval $(call gb_Helper_register_libraries_for_install,OOOLIBS,ooo, \ + configmgr \ + ctl \ + cui \ +- dba \ +- dbahsql \ +- $(call gb_Helper_optional,DBCONNECTIVITY, \ +- dbase \ +- dbaxml) \ + dbtools \ + deploymentmisc \ + $(if $(filter-out MACOSX WNT,$(OS)),desktopbe1) \ +@@ -366,7 +386,6 @@ $(eval $(call gb_Helper_register_libraries_for_install,OOOLIBS,ooo, \ + evtatt \ + expwrap \ + $(call gb_Helper_optional,DBCONNECTIVITY, \ +- flat \ + file) \ + filterconfig \ + fps_office \ +@@ -387,7 +406,6 @@ $(eval $(call gb_Helper_register_libraries_for_install,OOOLIBS,ooo, \ + gie \ + hyphen \ + icg \ +- $(if $(ENABLE_JAVA),jdbc) \ + $(if $(ENABLE_LDAP),ldapbe2) \ + $(if $(filter WNT,$(OS)),WinUserInfoBe) \ + localebe1 \ +@@ -403,10 +421,7 @@ $(eval $(call gb_Helper_register_libraries_for_install,OOOLIBS,ooo, \ + msfilter \ + $(call gb_Helper_optional,SCRIPTING,msforms) \ + mtfrenderer \ +- $(call gb_Helper_optional,DBCONNECTIVITY,mysql_jdbc) \ +- $(call gb_Helper_optional,MARIADBC,$(call gb_Helper_optional,DBCONNECTIVITY,mysqlc)) \ + numbertext \ +- odbc \ + odfflatxml \ + offacc \ + oox \ +@@ -419,13 +434,8 @@ $(eval $(call gb_Helper_register_libraries_for_install,OOOLIBS,ooo, \ + sb \ + $(call gb_Helper_optional,DBCONNECTIVITY,sdbt) \ + scn \ +- sd \ +- sdd \ +- sdfilt \ +- sdui \ + sfx \ + simplecanvas \ +- slideshow \ + sot \ + $(if $(filter-out iOS,$(OS)),spell) \ + $(if $(DISABLE_GUI),,spl) \ +@@ -437,7 +447,6 @@ $(eval $(call gb_Helper_register_libraries_for_install,OOOLIBS,ooo, \ + svt \ + svx \ + svxcore \ +- sw \ + syssh \ + textconversiondlgs \ + textfd \ +@@ -522,6 +531,7 @@ $(eval $(call gb_Helper_register_libraries_for_install,OOOLIBS,writer, \ + hwp \ + $(if $(ENABLE_LWP),lwpft) \ + msword \ ++ sw \ + swd \ + swui \ + t602filter \ +@@ -600,14 +610,12 @@ $(eval $(call gb_Helper_register_libraries_for_install,PLAINLIBS_OOO,ooo, \ + cached1 \ + collator_data \ + comphelper \ +- $(call gb_Helper_optional,DBCONNECTIVITY,dbpool2) \ + $(call gb_Helper_optional,BREAKPAD,crashreport) \ + deployment \ + deploymentgui \ + dict_ja \ + dict_zh \ + embobj \ +- $(if $(ENABLE_JAVA),hsqldb) \ + i18nutil \ + index_data \ + $(if $(and $(ENABLE_GTK3), $(filter LINUX %BSD SOLARIS,$(OS))), libreofficekitgtk) \ +@@ -623,7 +631,6 @@ $(eval $(call gb_Helper_register_libraries_for_install,PLAINLIBS_OOO,ooo, \ + emboleobj \ + package2 \ + $(call gb_Helper_optional,SCRIPTING,scriptframe) \ +- sdbc2 \ + sofficeapp \ + srtrs1 \ + $(if $(filter $(OS),WNT),sysdtrans) \ diff --git a/debian/patches/mediwiki-oor-replace.diff b/debian/patches/mediwiki-oor-replace.diff new file mode 100644 index 00000000000..ed04c917e35 --- /dev/null +++ b/debian/patches/mediwiki-oor-replace.diff @@ -0,0 +1,51 @@ +diff --git a/swext/mediawiki/src/registry/data/org/openoffice/Office/OptionsDialog.xcu b/swext/mediawiki/src/registry/data/org/openoffice/Office/OptionsDialog.xcu +index 2b35ced08f31..0c96070dd4f0 100644 +--- a/swext/mediawiki/src/registry/data/org/openoffice/Office/OptionsDialog.xcu ++++ b/swext/mediawiki/src/registry/data/org/openoffice/Office/OptionsDialog.xcu +@@ -18,9 +18,9 @@ + --> + + +- ++ + +- ++ + + com.sun.wiki-publisher + +diff --git a/swext/mediawiki/src/registry/data/org/openoffice/TypeDetection/Filter.xcu b/swext/mediawiki/src/registry/data/org/openoffice/TypeDetection/Filter.xcu +index 3309b503824c..261e470b253b 100644 +--- a/swext/mediawiki/src/registry/data/org/openoffice/TypeDetection/Filter.xcu ++++ b/swext/mediawiki/src/registry/data/org/openoffice/TypeDetection/Filter.xcu +@@ -19,7 +19,7 @@ + + + +- ++ + 0 + MediaWiki + com.sun.star.text.TextDocument +@@ -31,7 +31,7 @@ + + EXPORT ALIEN 3RDPARTYFILTER + +- ++ + 0 + MediaWiki + com.sun.star.text.WebDocument +diff --git a/swext/mediawiki/src/registry/data/org/openoffice/TypeDetection/Types.xcu b/swext/mediawiki/src/registry/data/org/openoffice/TypeDetection/Types.xcu +index 15e4f850041a..ce7cd0763b79 100644 +--- a/swext/mediawiki/src/registry/data/org/openoffice/TypeDetection/Types.xcu ++++ b/swext/mediawiki/src/registry/data/org/openoffice/TypeDetection/Types.xcu +@@ -19,7 +19,7 @@ + + + +- ++ + com.sun.star.comp.filters.XMLFilterDetect + + txt diff --git a/debian/patches/mention-java-common-package.diff b/debian/patches/mention-java-common-package.diff new file mode 100644 index 00000000000..24fbbc0a877 --- /dev/null +++ b/debian/patches/mention-java-common-package.diff @@ -0,0 +1,35 @@ +diff --git a/jvmfwk/plugins/sunmajor/javaenvsetup/javaldx.cxx b/jvmfwk/plugins/sunmajor/javaenvsetup/javaldx.cxx +index 718902caba6f..3c8499b5a42c 100644 +--- a/jvmfwk/plugins/sunmajor/javaenvsetup/javaldx.cxx ++++ b/jvmfwk/plugins/sunmajor/javaenvsetup/javaldx.cxx +@@ -141,6 +141,9 @@ static bool findAndSelect(JavaInfo ** ppInfo) + if (errcode == JFW_E_NO_JAVA_FOUND) + { + fprintf(stderr,"javaldx: Could not find a Java Runtime Environment!\n"); ++ fprintf(stderr,"Please ensure that a JVM and the package libreoffice-java-common\n"); ++ fprintf(stderr,"is installed.\n"); ++ fprintf(stderr,"If it is already installed then try removing ~/.config/libreoffice/4/user/config/javasettings_Linux_*.xml\n"); + return false; + } + else if (errcode != JFW_E_NONE && errcode != JFW_E_DIRECT_MODE) +diff --git a/include/svtools/strings.hrc b/include/svtools/strings.hrc +index f9dc617f4313..874b0400cbc5 100644 +--- a/include/svtools/strings.hrc ++++ b/include/svtools/strings.hrc +@@ -281,13 +281,13 @@ + + #define STR_SVT_DEFAULT_SERVICE_LABEL NC_("STR_SVT_DEFAULT_SERVICE_LABEL", "$user$'s $service$") + +-#define STR_WARNING_JAVANOTFOUND NC_("STR_WARNING_JAVANOTFOUND", "%PRODUCTNAME requires a Java runtime environment (JRE) to perform this task. Please install a JRE and restart %PRODUCTNAME.") ++#define STR_WARNING_JAVANOTFOUND NC_("STR_WARNING_JAVANOTFOUND", "%PRODUCTNAME requires a Java runtime environment (JRE) to perform this task. Please install a JRE (and libreoffice-java-common) and restart %PRODUCTNAME.") + #define STR_WARNING_JAVANOTFOUND_WIN NC_("STR_WARNING_JAVANOTFOUND_WIN", "%PRODUCTNAME requires a %BITNESS-bit Java runtime environment (JRE) to perform this task. Please install a JRE and restart %PRODUCTNAME.") + #define STR_WARNING_JAVANOTFOUND_MAC NC_("STR_WARNING_JAVANOTFOUND_MAC", "%PRODUCTNAME requires Oracle's Java Development Kit (JDK) on macOS 10.10 or greater to perform this task. Please install them and restart %PRODUCTNAME.") + #define STR_WARNING_INVALIDJAVASETTINGS_MAC NC_("STR_WARNING_INVALIDJAVASETTINGS_MAC", "The %PRODUCTNAME configuration has been changed. Under %PRODUCTNAME - Preferences - %PRODUCTNAME - Advanced, select the Java runtime environment you want to have used by %PRODUCTNAME.") +-#define STR_WARNING_INVALIDJAVASETTINGS NC_("STR_WARNING_INVALIDJAVASETTINGS", "The %PRODUCTNAME configuration has been changed. Under Tools - Options - %PRODUCTNAME - Advanced, select the Java runtime environment you want to have used by %PRODUCTNAME.") ++#define STR_WARNING_INVALIDJAVASETTINGS NC_("STR_WARNING_INVALIDJAVASETTINGS", "The %PRODUCTNAME configuration has been changed. Under Tools - Options - %PRODUCTNAME - Advanced, select the Java runtime environment you want to have used by %PRODUCTNAME. Maybe you also need to install libreoffice-java-common.") + #define STR_ERROR_JVMCREATIONFAILED_MAC NC_("STR_ERROR_JVMCREATIONFAILED_MAC", "%PRODUCTNAME requires a Java runtime environment (JRE) to perform this task. The selected JRE is defective. Please select another version or install a new JRE and select it under %PRODUCTNAME - Preferences - %PRODUCTNAME - Advanced.") +-#define STR_ERROR_JVMCREATIONFAILED NC_("STR_ERROR_JVMCREATIONFAILED", "%PRODUCTNAME requires a Java runtime environment (JRE) to perform this task. The selected JRE is defective. Please select another version or install a new JRE and select it under Tools - Options - %PRODUCTNAME - Advanced.") ++#define STR_ERROR_JVMCREATIONFAILED NC_("STR_ERROR_JVMCREATIONFAILED", "%PRODUCTNAME requires a Java runtime environment (JRE) to perform this task. The selected JRE is defective. Please select another version or install a new JRE and select it under Tools - Options - %PRODUCTNAME - Advanced or install libreoffice-java-common if not already installed.") + #define STR_WARNING_JAVANOTFOUND_TITLE NC_("STR_WARNING_JAVANOTFOUND_TITLE", "JRE Required") + #define STR_WARNING_INVALIDJAVASETTINGS_TITLE NC_("STR_WARNING_INVALIDJAVASETTINGS_TITLE", "Select JRE") + #define STR_ERROR_JVMCREATIONFAILED_TITLE NC_("STR_ERROR_JVMCREATIONFAILED_TITLE", "JRE is Defective") diff --git a/debian/patches/no-check-if-root.diff b/debian/patches/no-check-if-root.diff new file mode 100644 index 00000000000..95ebbb329a4 --- /dev/null +++ b/debian/patches/no-check-if-root.diff @@ -0,0 +1,26 @@ +--- a/Makefile.in 2017-07-28 06:09:37.072183489 +0000 ++++ b/Makefile.in 2017-10-18 12:43:59.215567467 +0000 +@@ -57,14 +57,6 @@ else # MAKE_RESTARTS + + .DEFAULT_GOAL := build + +-check-if-root: +- @if test ! `uname` = 'Haiku' -a `id -u` = 0 && ! grep -q 'lxc\|docker' /proc/self/cgroup && ! grep -q 'libpod_parent' /proc/self/cgroup; then \ +- echo; \ +- echo 'Building LibreOffice as root is a very bad idea, use a regular user.'; \ +- echo; \ +- exit 1; \ +- fi +- + gb_Side ?= host + + include $(BUILDDIR)/config_$(gb_Side).mk +@@ -252,7 +244,7 @@ endif + # + # Bootstrap + # +-bootstrap: check-if-root compilerplugins ++bootstrap: compilerplugins + + # + # Build diff --git a/debian/patches/no-opencl-per-default.diff b/debian/patches/no-opencl-per-default.diff new file mode 100644 index 00000000000..d17e9c0598d --- /dev/null +++ b/debian/patches/no-opencl-per-default.diff @@ -0,0 +1,26 @@ +From b54cfe9d3d22fdd40f7015bd343df8620c983779 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Mon, 27 Mar 2017 11:47:01 +0100 +Subject: [PATCH] Resolves: rhbz#1432468 disable opencl by default + +Change-Id: Ie037fcabdd219f195425979dd721501fb5527573 +--- + officecfg/registry/schema/org/openoffice/Office/Common.xcs | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/officecfg/registry/schema/org/openoffice/Office/Common.xcs b/officecfg/registry/schema/org/openoffice/Office/Common.xcs +index 946bd32..284d694 100644 +--- a/officecfg/registry/schema/org/openoffice/Office/Common.xcs ++++ b/officecfg/registry/schema/org/openoffice/Office/Common.xcs +@@ -5670,7 +5670,7 @@ + Determines whether OpenCL can be used, when available, to speed up + some operations. + +- true ++ false + + + +-- +2.9.3 + diff --git a/debian/patches/no-openssl.diff b/debian/patches/no-openssl.diff new file mode 100644 index 00000000000..a5c26903ae1 --- /dev/null +++ b/debian/patches/no-openssl.diff @@ -0,0 +1,357 @@ +don't add -lssl etc if not needed (because we use system-postgresql) + +diff --git a/RepositoryExternal.mk b/RepositoryExternal.mk +index 0fc7d25..952b140 100644 +--- a/RepositoryExternal.mk ++++ b/RepositoryExternal.mk +@@ -2911,9 +2917,10 @@ $(call gb_LinkTarget_add_libs,$(1),\ + $(call gb_UnpackedTarball_get_dir,postgresql)/src/interfaces/libpq/libpq$(gb_StaticLibrary_PLAINEXT) \ + ) + +-ifeq ($(OS),WNT) + $(call gb_LinkTarget_use_external,$(1),openssl) + ++ifeq ($(OS),WNT) ++ + $(call gb_LinkTarget_use_system_win32_libs,$(1),\ + secur32 \ + ws2_32 \ +diff --git a/connectivity/Library_postgresql-sdbc-impl.mk b/connectivity/Library_postgresql-sdbc-impl.mk +index 0580a8b..7e8b778 100644 +--- a/connectivity/Library_postgresql-sdbc-impl.mk ++++ b/connectivity/Library_postgresql-sdbc-impl.mk +@@ -46,7 +46,6 @@ $(eval $(call gb_Library_use_externals,postgresql-sdbc-impl,\ + boost_headers \ + postgresql \ + $(if $(filter-out MSC,$(COM)), \ +- openssl \ + $(if $(ENABLE_LDAP),openldap) \ + nss3 \ + plc4 \ + +... and don't uselessly check for openssl in configure + +diff --git a/config_host.mk.in b/config_host.mk.in +index ddd144e..19f8368 100644 +--- a/config_host.mk.in ++++ b/config_host.mk.in +@@ -93,7 +93,6 @@ export DEFAULT_BRAND_IMAGES=@DEFAULT_BRAND_IMAGES@ + export DICT_SYSTEM_DIR=@DICT_SYSTEM_DIR@ + export DISABLE_CVE_TESTS=@DISABLE_CVE_TESTS@ + export DISABLE_DYNLOADING=@DISABLE_DYNLOADING@ +-export DISABLE_OPENSSL=@DISABLE_OPENSSL@ + export DISABLE_PYTHON=@DISABLE_PYTHON@ + export DLOPEN_LIBS=@DLOPEN_LIBS@ + export DLLTOOL=@DLLTOOL@ +@@ -438,8 +439,6 @@ export OOO_JUNIT_JAR=@OOO_JUNIT_JAR@ + export BFFVALIDATOR=@BFFVALIDATOR@ + export OOO_JUNIT_JAR=@OOO_JUNIT_JAR@ + export OOO_VENDOR=@OOO_VENDOR@ +-export OPENSSL_CFLAGS=$(gb_SPACE)@OPENSSL_CFLAGS@ +-export OPENSSL_LIBS=$(gb_SPACE)@OPENSSL_LIBS@ + export OPENSYMBOL_TTF=@OPENSYMBOL_TTF@ + export ORCUS_CFLAGS=$(gb_SPACE)@ORCUS_CFLAGS@ + export ORCUS_LIBS=$(gb_SPACE)@ORCUS_LIBS@ +@@ -569,7 +568,6 @@ export SYSTEM_ODBC_HEADERS=@SYSTEM_ODBC_HEADERS@ + export SYSTEM_ODBC_HEADERS=@SYSTEM_ODBC_HEADERS@ + export SYSTEM_ODFGEN=@SYSTEM_ODFGEN@ + export SYSTEM_OPENLDAP=@SYSTEM_OPENLDAP@ +-export SYSTEM_OPENSSL=@SYSTEM_OPENSSL@ + export SYSTEM_PAGEMAKER=@SYSTEM_PAGEMAKER@ + export SYSTEM_POPPLER=@SYSTEM_POPPLER@ + export SYSTEM_POSTGRESQL=@SYSTEM_POSTGRESQL@ +diff --git a/configure.ac b/configure.ac +index 3862386..45d5e25 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -9422,67 +9422,6 @@ else + AC_MSG_RESULT([no]) + fi + +-dnl =================================================================== +-dnl Check for system openssl +-dnl =================================================================== +-DISABLE_OPENSSL= +-AC_MSG_CHECKING([whether to disable OpenSSL usage]) +-if test "$enable_openssl" = "yes"; then +- AC_MSG_RESULT([no]) +- if test "$_os" = Darwin ; then +- # OpenSSL is deprecated when building for 10.7 or later. +- # +- # http://stackoverflow.com/questions/7406946/why-is-apple-deprecating-openssl-in-macos-10-7-lion +- # http://stackoverflow.com/questions/7475914/libcrypto-deprecated-on-mac-os-x-10-7-lion +- +- with_system_openssl=no +- libo_CHECK_SYSTEM_MODULE([openssl],[OPENSSL],[openssl]) +- elif test "$_os" = "NetBSD" -o "$_os" = "OpenBSD" -o "$_os" = "DragonFly" \ +- && test "$with_system_openssl" != "no"; then +- with_system_openssl=yes +- SYSTEM_OPENSSL=TRUE +- OPENSSL_CFLAGS= +- OPENSSL_LIBS="-lssl -lcrypto" +- else +- libo_CHECK_SYSTEM_MODULE([openssl],[OPENSSL],[openssl]) +- fi +- if test "$with_system_openssl" = "yes"; then +- AC_MSG_CHECKING([whether openssl supports SHA512]) +- AC_LANG_PUSH([C]) +- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]],[[ +- SHA512_CTX context; +-]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no, openssl too old. Need >= 0.9.8.])]) +- AC_LANG_POP(C) +- fi +-else +- AC_MSG_RESULT([yes]) +- DISABLE_OPENSSL=TRUE +- +- # warn that although OpenSSL is disabled, system libraries may depend on it +- AC_MSG_WARN([OpenSSL has been disabled. No code compiled here will make use of it but system libraries may create indirect dependencies]) +- add_warning "OpenSSL has been disabled. No code compiled here will make use of it but system libraries may create indirect dependencies" +-fi +- +-AC_SUBST([DISABLE_OPENSSL]) +- +-if test "$enable_cipher_openssl_backend" = yes && test "$DISABLE_OPENSSL" = TRUE; then +- if test "$libo_fuzzed_enable_cipher_openssl_backend" = yes; then +- AC_MSG_NOTICE([Resetting --enable-cipher-openssl-backend=no]) +- enable_cipher_openssl_backend=no +- else +- AC_MSG_ERROR([--enable-cipher-openssl-backend needs OpenSSL, but --disable-openssl was given.]) +- fi +-fi +-AC_MSG_CHECKING([whether to enable the OpenSSL backend for rtl/cipher.h]) +-ENABLE_CIPHER_OPENSSL_BACKEND= +-if test "$enable_cipher_openssl_backend" = yes; then +- AC_MSG_RESULT([yes]) +- ENABLE_CIPHER_OPENSSL_BACKEND=TRUE +-else +- AC_MSG_RESULT([no]) +-fi +-AC_SUBST([ENABLE_CIPHER_OPENSSL_BACKEND]) +- + dnl =================================================================== + dnl Check for building gnutls + dnl =================================================================== + +.. and without these gbuild still wants it ... + +diff --git a/external/Module_external.mk b/external/Module_external.mk +index 44280e3..44c1c63 100644 +--- a/external/Module_external.mk ++++ b/external/Module_external.mk +@@ -82,7 +82,6 @@ $(eval $(call gb_Module_add_moduledirs,external,\ + $(call gb_Helper_optional,NSS,nss) \ + $(call gb_Helper_optional,ODFGEN,libodfgen) \ + $(call gb_Helper_optional,OPENLDAP,openldap) \ +- $(call gb_Helper_optional,OPENSSL,openssl) \ + $(call gb_Helper_optional,ORCUS,liborcus) \ + $(call gb_Helper_optional,OWNCLOUD_ANDROID_LIB,owncloud-android-lib) \ + $(call gb_Helper_optional,PAGEMAKER,libpagemaker) \ +diff --git a/oox/CppunitTest_oox_tokenmap.mk b/oox/CppunitTest_oox_tokenmap.mk +index 9eac2a5..ef6d5c9 100644 +--- a/oox/CppunitTest_oox_tokenmap.mk ++++ b/oox/CppunitTest_oox_tokenmap.mk +@@ -20,19 +20,10 @@ $(eval $(call gb_CppunitTest_use_sdk_api,oox_tokenmap)) + + $(eval $(call gb_CppunitTest_use_library_objects,oox_tokenmap,oox)) + +-ifeq ($(TLS),OPENSSL) +-$(eval $(call gb_CppunitTest_use_externals,oox_tokenmap,\ +- openssl \ +- openssl_headers \ +-)) +-else +-ifeq ($(TLS),NSS) + $(eval $(call gb_CppunitTest_use_externals,oox_tokenmap,\ + plc4 \ + nss3 \ + )) +-endif +-endif + + $(eval $(call gb_CppunitTest_use_libraries,oox_tokenmap,\ + avmedia \ +diff --git a/oox/Library_oox.mk b/oox/Library_oox.mk +index fcd7215..a178883 100644 +--- a/oox/Library_oox.mk ++++ b/oox/Library_oox.mk +@@ -67,19 +67,10 @@ $(eval $(call gb_Library_use_externals,oox,\ + boost_headers \ + )) + +-ifeq ($(TLS),OPENSSL) +-$(eval $(call gb_Library_use_externals,oox,\ +- openssl \ +- openssl_headers \ +-)) +-else +-ifeq ($(TLS),NSS) + $(eval $(call gb_Library_use_externals,oox,\ + plc4 \ + nss3 \ + )) +-endif +-endif + + $(eval $(call gb_Library_set_componentfile,oox,oox/util/oox)) + +diff --git a/ucb/CppunitTest_ucb_webdav_local_neon.mk b/ucb/CppunitTest_ucb_webdav_local_neon.mk +index 20e827b..9b869f9 100644 +--- a/ucb/CppunitTest_ucb_webdav_local_neon.mk ++++ b/ucb/CppunitTest_ucb_webdav_local_neon.mk +@@ -34,7 +34,6 @@ $(eval $(call gb_CppunitTest_use_externals,ucb_webdav_local_neon,\ + boost_headers \ + libxml2 \ + neon \ +- openssl \ + )) + + $(eval $(call gb_CppunitTest_use_custom_headers,ucb_webdav_local_neon,\ +diff --git a/ucb/Library_ucpdav1.mk b/ucb/Library_ucpdav1.mk +index 37f3c8f..2167dd2 100644 +--- a/ucb/Library_ucpdav1.mk ++++ b/ucb/Library_ucpdav1.mk +@@ -30,7 +30,6 @@ $(eval $(call gb_Library_use_externals,ucpdav1,\ + boost_headers \ + libxml2 \ + neon \ +- openssl \ + )) + + $(eval $(call gb_Library_use_custom_headers,ucpdav1,\ +@@ -66,7 +65,6 @@ else # WITH_WEBDAV == serf + $(eval $(call gb_Library_use_externals,ucpdav1,\ + boost_headers \ + apr \ +- openssl \ + serf \ + zlib \ + )) +diff --git a/RepositoryExternal.mk b/RepositoryExternal.mk +index 0fc7d25..fe5a208 100644 +--- a/RepositoryExternal.mk ++++ b/RepositoryExternal.mk +@@ -1525,75 +1525,6 @@ endif # ENABLE_HARFBUZZ + + ifeq ($(DISABLE_OPENSSL),TRUE) + +-gb_ExternalProject__use_openssl:= +-gb_LinkTarget__use_openssl_headers:= +-gb_LinkTarget__use_openssl:= +- +-else # !DISABLE_OPENSSL +- +-ifneq ($(SYSTEM_OPENSSL),) +- +-gb_LinkTarget__use_openssl_headers:= +-gb_ExternalProject__use_openssl:= +- +-define gb_LinkTarget__use_openssl +-$(call gb_LinkTarget_set_include,$(1),\ +- $$(INCLUDE) \ +- $(OPENSSL_CFLAGS) \ +-) +-$(call gb_LinkTarget_add_libs,$(1),$(OPENSSL_LIBS)) +- +-endef +- +-else # !SYSTEM_OPENSSL +- +-$(eval $(call gb_Helper_register_packages_for_install,ooo, \ +- openssl \ +-)) +- +-define gb_ExternalProject__use_openssl +-$(call gb_ExternalProject_use_package,$(1),openssl) +- +-endef +- +-define gb_LinkTarget__use_openssl_headers +-$(call gb_LinkTarget_use_external_project,$(1),openssl) +-$(call gb_LinkTarget_set_include,$(1),\ +- -I$(call gb_UnpackedTarball_get_dir,openssl)/include \ +- $$(INCLUDE) \ +-) +- +-endef +- +-define gb_LinkTarget__use_openssl +-$(call gb_LinkTarget_use_package,$(1),openssl) +-ifeq ($(OS),WNT) +-$(call gb_LinkTarget_add_libs,$(1),\ +- $(call gb_UnpackedTarball_get_dir,openssl)/out32dll/ssleay32.lib \ +- $(call gb_UnpackedTarball_get_dir,openssl)/out32dll/libeay32.lib \ +-) +-else +-$(call gb_LinkTarget_add_libs,$(1),\ +- $(call gb_UnpackedTarball_get_dir,openssl)/libssl.a \ +- $(call gb_UnpackedTarball_get_dir,openssl)/libcrypto.a \ +-) +-$(call gb_LinkTarget_use_external_project,$(1),openssl) +-ifeq ($(OS),SOLARIS) +-$(call gb_LinkTarget_add_libs,$(1),\ +- -lnsl \ +- -lsocket \ +-) +-endif +-endif +- +-endef +- +-endif # SYSTEM_OPENSSL +-endif # DISABLE_OPENSSL +- +- +-ifeq ($(DISABLE_OPENSSL),TRUE) +- + define gb_LinkTarget__use_gnutls + $(call gb_LinkTarget_set_include,$(1),\ + $$(INCLUDE) \ +diff --git a/ucb/CppunitTest_ucb_webdav_neon_opts.mk b/ucb/CppunitTest_ucb_webdav_neon_opts.mk +index 91e167b..21e5257 100644 +--- a/ucb/CppunitTest_ucb_webdav_neon_opts.mk ++++ b/ucb/CppunitTest_ucb_webdav_neon_opts.mk +@@ -34,7 +34,6 @@ $(eval $(call gb_CppunitTest_use_externals,ucb_webdav_neon_opts,\ + boost_headers \ + libxml2 \ + neon \ +- openssl \ + )) + + $(eval $(call gb_CppunitTest_use_custom_headers,ucb_webdav_neon_opts,\ +diff --git a/ucb/CppunitTest_ucb_webdav_propfindcache.mk b/ucb/CppunitTest_ucb_webdav_propfindcache.mk +index ebbaee7..e2d064e 100644 +--- a/ucb/CppunitTest_ucb_webdav_propfindcache.mk ++++ b/ucb/CppunitTest_ucb_webdav_propfindcache.mk +@@ -34,7 +34,6 @@ $(eval $(call gb_CppunitTest_use_externals,ucb_webdav_propfindcache,\ + boost_headers \ + libxml2 \ + neon \ +- openssl \ + )) + + $(eval $(call gb_CppunitTest_use_custom_headers,ucb_webdav_propfindcache,\ +diff --git a/ucb/CppunitTest_ucb_webdav_res_access.mk b/ucb/CppunitTest_ucb_webdav_res_access.mk +index ac48f87..c7d151e 100644 +--- a/ucb/CppunitTest_ucb_webdav_res_access.mk ++++ b/ucb/CppunitTest_ucb_webdav_res_access.mk +@@ -34,7 +34,6 @@ $(eval $(call gb_CppunitTest_use_externals,ucb_webdav_res_access,\ + boost_headers \ + libxml2 \ + neon \ +- openssl \ + )) + + $(eval $(call gb_CppunitTest_use_custom_headers,ucb_webdav_res_access,\ +diff --git a/connectivity/Library_mysqlc.mk b/connectivity/Library_mysqlc.mk +index f765fb1e305f..0999b46d3eec 100644 +--- a/connectivity/Library_mysqlc.mk ++++ b/connectivity/Library_mysqlc.mk +@@ -12,7 +12,6 @@ $(eval $(call gb_Library_Library,mysqlc)) + $(eval $(call gb_Library_use_externals,mysqlc,\ + boost_headers \ + mariadb-connector-c \ +- openssl \ + )) + + $(eval $(call gb_Library_set_include,mysqlc,\ diff --git a/debian/patches/no-packagekit-per-default.diff b/debian/patches/no-packagekit-per-default.diff new file mode 100644 index 00000000000..a496c702169 --- /dev/null +++ b/debian/patches/no-packagekit-per-default.diff @@ -0,0 +1,21 @@ +diff --git a/officecfg/registry/data/org/openoffice/Office/Common.xcu b/officecfg/registry/data/org/openoffice/Office/Common.xcu +index 3d138551b593..9cb9831f3236 100644 +--- a/officecfg/registry/data/org/openoffice/Office/Common.xcu ++++ b/officecfg/registry/data/org/openoffice/Office/Common.xcu +@@ -551,13 +551,13 @@ + + + +- true ++ false + + +- true ++ false + + +- true ++ false + + + diff --git a/debian/patches/pdfium-m68k.diff b/debian/patches/pdfium-m68k.diff new file mode 100644 index 00000000000..8b9df41fa09 --- /dev/null +++ b/debian/patches/pdfium-m68k.diff @@ -0,0 +1,20 @@ +don't break pdfium build on m68k + +FIXME: Make this set by autoconf, most of the defines in build_config.h are not actually +used anyway in pdfium... + +diff --git a/external/pdfium/configs/build_config.h b/external/pdfium/configs/build_config.h +index 22084c0a0836..6fd080e644fb 100644 +--- a/external/pdfium/configs/build_config.h ++++ b/external/pdfium/configs/build_config.h +@@ -118,6 +118,9 @@ + #define ARCH_CPU_ARM_FAMILY 1 + #define ARCH_CPU_ARM64 1 + #define ARCH_CPU_64_BITS 1 ++#elif defined(__m68k__) ++#define ARCH_CPU_M68K 1 ++#define ARCH_CPU_32_BITS 1 + #else + #error Please add support for your architecture in build/build_config.h + #endif + diff --git a/debian/patches/reportdesign-mention-package.diff b/debian/patches/reportdesign-mention-package.diff new file mode 100644 index 00000000000..f85471bf069 --- /dev/null +++ b/debian/patches/reportdesign-mention-package.diff @@ -0,0 +1,13 @@ +diff --git a/dbaccess/inc/strings.hrc b/dbaccess/inc/strings.hrc +index 47068f43d09e..1f8b9a2331b6 100644 +--- a/dbaccess/inc/strings.hrc ++++ b/dbaccess/inc/strings.hrc +@@ -349,7 +349,7 @@ + #define STR_WARNINGS_DURING_CONNECT NC_("STR_WARNINGS_DURING_CONNECT", "Warnings were encountered while connecting to the data source. Press \"$buttontext$\" to view them.") + #define STR_NAMED_OBJECT_ALREADY_EXISTS NC_("STR_NAMED_OBJECT_ALREADY_EXISTS", "The name '$#$' already exists.\nPlease enter another name." ) + // #i96130# use hard coded name +-#define RID_STR_EXTENSION_NOT_PRESENT NC_("RID_STR_EXTENSION_NOT_PRESENT", "The report, \"$file$\", requires the Report Builder feature.") ++#define RID_STR_EXTENSION_NOT_PRESENT NC_("RID_STR_EXTENSION_NOT_PRESENT", "The report, \"$file$\", requires the Report Builder feature. For this, install the package 'libreoffice-report-builder'.") + + #define STR_COULDNOTCREATE_DRIVERMANAGER NC_("STR_COULDNOTCREATE_DRIVERMANAGER", "Cannot connect to the SDBC driver manager (#servicename#).") + #define STR_NOREGISTEREDDRIVER NC_("STR_NOREGISTEREDDRIVER", "A driver is not registered for the URL #connurl#.") diff --git a/debian/patches/sc-opengl-optional.diff b/debian/patches/sc-opengl-optional.diff new file mode 100644 index 00000000000..20a5cbe2118 --- /dev/null +++ b/debian/patches/sc-opengl-optional.diff @@ -0,0 +1,26 @@ +diff --git a/sc/source/core/data/global.cxx b/sc/source/core/data/global.cxx +index c657bd81defc..d5678c089f41 100644 +--- a/sc/source/core/data/global.cxx ++++ b/sc/source/core/data/global.cxx +@@ -71,6 +71,8 @@ + #include + #include + ++#include ++ + tools::SvRef ScGlobal::xDrawClipDocShellRef; + SvxSearchItem* ScGlobal::pSearchItem = nullptr; + ScAutoFormat* ScGlobal::pAutoFormat = nullptr; +@@ -472,7 +474,11 @@ void ScGlobal::InitPPT() + { + OutputDevice* pDev = Application::GetDefaultDevice(); + +- if (comphelper::LibreOfficeKit::isActive() || OpenGLWrapper::isVCLOpenGLEnabled()) ++ if (comphelper::LibreOfficeKit::isActive() ++#if defined HAVE_FEATURE_OPENGL && defined HAVE_FEATURE_UI ++|| OpenGLWrapper::isVCLOpenGLEnabled() ++#endif ++) + { + // LOK: the below limited precision is not enough for RowColumnHeader. + // OpenGL: limited precision breaks AA of text in charts. diff --git a/debian/patches/search-usr-share-for-images.diff b/debian/patches/search-usr-share-for-images.diff new file mode 100644 index 00000000000..6b91fcc127e --- /dev/null +++ b/debian/patches/search-usr-share-for-images.diff @@ -0,0 +1,137 @@ +diff --git a/vcl/inc/impimagetree.hxx b/vcl/inc/impimagetree.hxx +index 41c4f56..93d80f1 100644 +--- a/vcl/inc/impimagetree.hxx ++++ b/vcl/inc/impimagetree.hxx +@@ -85,6 +85,10 @@ private: + typedef boost::unordered_map< + rtl::OUString, std::pair< bool, BitmapEx >, rtl::OUStringHash > IconCache; + ++ // we want to search zip files (icons) also in /usr/share/ ++ ::rtl::OUString m_datadir; // /usr/share/ ++ ::rtl::OUString m_libdir; // /usr/lib or /usr/lib64 ++ + rtl::OUString m_style; + Zips m_zips; + CheckStyleCache m_checkStyleCache; +@@ -92,6 +96,7 @@ private: + + void setStyle(rtl::OUString const & style ); + ++ void addUrlToZips(const rtl::OUString &url); + void resetZips(); + + bool checkStyleCacheLookup( rtl::OUString const & style, bool &exists ); +diff --git a/vcl/source/gdi/impimagetree.cxx b/vcl/source/gdi/impimagetree.cxx +index 03442fc..cfe6c45 100644 +--- a/vcl/source/gdi/impimagetree.cxx ++++ b/vcl/source/gdi/impimagetree.cxx +@@ -121,7 +121,11 @@ void loadFromStream( + + } + +-ImplImageTree::ImplImageTree() {} ++ImplImageTree::ImplImageTree() ++{ ++ m_datadir = ::rtl::OUString::createFromAscii ( "/usr/share/" ); ++ m_libdir = ::rtl::OUString::createFromAscii ( "/usr/lib/" ); ++} + + ImplImageTree::~ImplImageTree() {} + +@@ -259,6 +263,22 @@ void ImplImageTree::setStyle(rtl::OUString const & style) { + } + } + ++void ImplImageTree::addUrlToZips(const rtl::OUString &url) { ++ if ( url.getLength() == 0 ) ++ return; ++ m_zips.push_back( ++ std::make_pair( ++ url, ++ css::uno::Reference< css::container::XNameAccess >())); ++ sal_Int32 nLibDirPos = url.indexOf( m_libdir ); ++ if ( nLibDirPos >= 0 ) { ++ m_zips.push_back( ++ std::make_pair( ++ url.replaceAt( nLibDirPos, m_libdir.getLength(), m_datadir ), ++ css::uno::Reference< css::container::XNameAccess >())); ++ } ++} ++ + void ImplImageTree::resetZips() { + m_zips.clear(); + { +@@ -284,19 +304,14 @@ void ImplImageTree::resetZips() { + b.appendAscii(RTL_CONSTASCII_STRINGPARAM("_brand.zip")); + bool ok = u.Append(b.makeStringAndClear(), INetURLObject::ENCODE_ALL); + OSL_ASSERT(ok); (void) ok; +- m_zips.push_back( +- std::make_pair( +- u.GetMainURL(INetURLObject::NO_DECODE), +- css::uno::Reference< css::container::XNameAccess >())); ++ addUrlToZips(u.GetMainURL(INetURLObject::NO_DECODE)); + } + { + rtl::OUString url( + RTL_CONSTASCII_USTRINGPARAM( + "$BRAND_BASE_DIR/share/config/images_brand.zip")); + rtl::Bootstrap::expandMacros(url); +- m_zips.push_back( +- std::make_pair( +- url, css::uno::Reference< css::container::XNameAccess >())); ++ addUrlToZips(url); + } + { + rtl::OUString url( +@@ -310,10 +310,7 @@ + b.appendAscii(RTL_CONSTASCII_STRINGPARAM(".zip")); + bool ok = u.Append(b.makeStringAndClear(), INetURLObject::ENCODE_ALL); + OSL_ASSERT(ok); (void) ok; +- m_zips.push_back( +- std::make_pair( +- u.GetMainURL(INetURLObject::NO_DECODE), +- css::uno::Reference< css::container::XNameAccess >())); ++ addUrlToZips(u.GetMainURL(INetURLObject::NO_DECODE)); + } + if ( m_style == "default" ) + { +@@ -321,9 +333,7 @@ void ImplImageTree::resetZips() { + RTL_CONSTASCII_USTRINGPARAM( + "$BRAND_BASE_DIR/share/config/images.zip")); + rtl::Bootstrap::expandMacros(url); +- m_zips.push_back( +- std::make_pair( +- url, css::uno::Reference< css::container::XNameAccess >())); ++ addUrlToZips(url); + } + } + +diff --git a/xmlhelp/source/cxxhelp/provider/provider.cxx b/xmlhelp/source/cxxhelp/provider/provider.cxx +index e55fe5d..848bed7 100644 +--- a/xmlhelp/source/cxxhelp/provider/provider.cxx ++++ b/xmlhelp/source/cxxhelp/provider/provider.cxx +@@ -335,7 +335,7 @@ void ContentProvider::init() + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( " " )) + + setupextension ); + +- uno::Sequence< rtl::OUString > aImagesZipPaths( 2 ); ++ uno::Sequence< rtl::OUString > aImagesZipPaths( 3 ); + xHierAccess = getHierAccess( sProvider, "org.openoffice.Office.Common" ); + + rtl::OUString aPath( getKey( xHierAccess, "Path/Current/UserConfig" ) ); +@@ -344,6 +344,15 @@ void ContentProvider::init() + + aPath = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("$BRAND_BASE_DIR/share/config")); + rtl::Bootstrap::expandMacros(aPath); ++ aImagesZipPaths[ 2 ] = aPath; ++ ++ // try also /usr/share and even before /usr/lib ++ ::rtl::OUString aDataDir = ::rtl::OUString::createFromAscii ( "/usr/share/" ); ++ ::rtl::OUString aLibDir = ::rtl::OUString::createFromAscii ( "/usr/lib/" ); ++ sal_Int32 nLibDirPos = aPath.indexOf( aLibDir ); ++ ++ if ( nLibDirPos >= 0 ) ++ aPath = aPath.replaceAt( nLibDirPos, aLibDir.getLength(), aDataDir ); + aImagesZipPaths[ 1 ] = aPath; + + uno::Reference< uno::XComponentContext > xContext; diff --git a/debian/patches/sensible-lomua.diff b/debian/patches/sensible-lomua.diff new file mode 100644 index 00000000000..6b98bbc4d6e --- /dev/null +++ b/debian/patches/sensible-lomua.diff @@ -0,0 +1,50 @@ +Index: libreoffice-3.6.2~rc1/officecfg/registry/data/org/openoffice/Office/Common.xcu +=================================================================== +--- libreoffice-3.6.2~rc1.orig/officecfg/registry/data/org/openoffice/Office/Common.xcu 2012-10-07 21:03:17.662850386 -0400 ++++ libreoffice-3.6.2~rc1/officecfg/registry/data/org/openoffice/Office/Common.xcu 2012-10-07 21:03:57.174850591 -0400 +@@ -655,7 +655,7 @@ + + + +- ++ sensible-lomua + + + +Index: libreoffice-3.6.2~rc1/shell/source/unix/misc/senddoc.sh +=================================================================== +--- libreoffice-3.6.2~rc1.orig/shell/source/unix/misc/senddoc.sh 2012-10-07 21:03:17.662850386 -0400 ++++ libreoffice-3.6.2~rc1/shell/source/unix/misc/senddoc.sh 2012-10-07 21:29:13.074858447 -0400 +@@ -59,6 +59,32 @@ + shift + fi + ++case `basename "$MAILER"` in ++ sensible-lomua) ++ if [ -x /usr/bin/xdg-email ] ; then ++ MAILER=/usr/bin/xdg-email ++ elif [ -n "$KDE_FULL_SESSION" -a -x /usr/bin/kde-open ] \ ++ || [ -x /usr/bin/gnome-open ] \ ++ || [ -x /usr/bin/xdg-open ]; then ++ # use an undefined mailer, to trigger the default handling ++ MAILER=undefined ++ elif [ -n "$GNOME_DESKTOP_SESSION_ID" -a -x /usr/bin/evolution ]; then ++ MAILER=/usr/bin/evolution ++ elif [ -n "$KDE_FULL_SESSION" -a -x /usr/bin/kmail ]; then ++ MAILER=/usr/bin/kmail ++ elif [ -x /usr/bin/evolution ]; then ++ # default ++ MAILER=/usr/bin/evolution ++ elif [ -x /usr/bin/icedove ]; then ++ # fallback ++ MAILER=/usr/bin/icedove ++ elif [ -x /usr/bin/thunderbird ]; then ++ # fallback ++ MAILER=/usr/bin/thunderbird ++ fi ++ ;; ++esac ++ + # autodetect mail client from executable name + case $(basename "$MAILER" | sed 's/-.*$//') in + diff --git a/debian/patches/series b/debian/patches/series new file mode 100644 index 00000000000..c9678e52523 --- /dev/null +++ b/debian/patches/series @@ -0,0 +1,66 @@ +no-check-if-root.diff +debian-opt.diff +jurt-soffice-location.diff +split-evoab.diff +debian-debug.diff +#fix-system-lpsolve-build.diff +build-against-shared-lpsolve.diff +install-fixes.diff +mention-java-common-package.diff +help-msg-add-package-info.diff +sensible-lomua.diff +reportdesign-mention-package.diff +jdbc-driver-classpaths.diff +#search-usr-share-for-images.diff +make-package-modules-not-suck.diff +mediwiki-oor-replace.diff +debian-hardened-buildflags-CPPFLAGS.diff +debian-hardened-buildflags-no-LO-fstack-protector-strong.diff +disable-flaky-tests.diff +#dont-touch-urd.diff +fix-internal-hsqldb-build.diff +javadoc-optional.diff +hppa-is-32bit.diff +no-packagekit-per-default.diff +system-officeotron-and-odfvalidator.diff +no-openssl.diff +cppunit-optional.diff +#disable-unused-test-programs.diff +apparmor-complain.diff +hide-math-desktop-file.patch +appstream-ignore-startcenter.diff +disable-java-in-odk-build-examples-on-zero-vm.diff +do-not-hide-test-output.diff +apparmor-allow-java.security.diff +apparmor-cleanups.diff +apparmor-mesa.diff +disableClassPathURLCheck.diff +use-mariadb-java-instead-of-mysql-java.diff +apparmor-opencl.diff +fix-uicheck-tests-on-i386.patch +fix-flaky-bridgetest.diff +add-access2base-doc.diff +sc-opengl-optional.diff +fix-lo-xlate-lang-nb.diff +disable-shortcuts_tab_navigation-uitest.diff +no-opencl-per-default.diff +bigendian.diff +liborcus-0.16.diff +bash-completion-DRAWDOCS-pdf.diff +fix-bluez-external.diff +unowinreg-static-libgcc.diff +pdfium-m68k.diff +apparmor-updates.diff +xmlsecurity-replace-XSecParser-implementation.diff +xmlsecurity-XSecParser-confused-about-multiple-timestamps.diff +xmlsecurity-ignore-elements-in-ds:Object-that-arent-signed.diff +default-to-CertificateValidity::INVALID.diff +xmlsecurity-improve-handling-of-multiple-X509Data-elements.diff +hrk-euro.diff +b0404f80577de9ff69e58390c6f6ef949fdb0139.patch +0001-CVE-2022-26305-compare-authors-using-Thumbprint.patch +0002-CVE-2022-26307-make-hash-encoding-match-decoding.patch +0003-CVE-2022-26306-add-Initialization-Vectors-to-passwor.patch +0004-CVE-2022-2630-6-7-add-infobar-to-prompt-to-refresh-t.patch +fix-e_book_client_connect_direct_sync-sig.diff +ZDI-CAN-17859.diff diff --git a/debian/patches/split-evoab.diff b/debian/patches/split-evoab.diff new file mode 100644 index 00000000000..f563560099f --- /dev/null +++ b/debian/patches/split-evoab.diff @@ -0,0 +1,61 @@ +diff --git a/scp2/source/gnome/file_gnome.scp b/scp2/source/gnome/file_gnome.scp +index c7a13c8..a3f59a6 100644 +--- a/scp2/source/gnome/file_gnome.scp ++++ b/scp2/source/gnome/file_gnome.scp +@@ -25,3 +25,13 @@ File gid_File_Share_Registry_Gnome_Xcd + Name = "gnome.xcd"; + End + #endif ++ ++#ifdef ENABLE_EVOAB2 ++File gid_File_Share_Registry_Evoab_Xcd ++ TXT_FILE_BODY; ++ Styles = (PACKED); ++ Dir = gid_Brand_Dir_Share_Registry; ++ Name = "evoab.xcd"; ++End ++#endif ++ +diff --git a/scp2/source/gnome/module_gnome.scp b/scp2/source/gnome/module_gnome.scp +index 08d9efe..492e274 100644 +--- a/scp2/source/gnome/module_gnome.scp ++++ b/scp2/source/gnome/module_gnome.scp +@@ -31,6 +31,9 @@ Module gid_Module_Optional_Gnome + #if ENABLE_GIO + ,gid_File_Share_Registry_Gnome_Xcd + #endif ++#ifdef ENABLE_EVOAB2 ++ ,gid_File_Share_Registry_Evoab_Xcd ++#endif + ); + End + +diff --git a/postprocess/CustomTarget_registry.mk b/postprocess/CustomTarget_registry.mk +index 510b444..3ff190f 100644 +--- a/postprocess/CustomTarget_registry.mk ++++ b/postprocess/CustomTarget_registry.mk +@@ -331,8 +331,9 @@ ifneq ($(WITH_WEBDAV),) + postprocess_FILES_main += $(postprocess_MOD)/org/openoffice/ucb/Configuration-webdav.xcu + endif + ifeq ($(ENABLE_EVOAB2),TRUE) +-postprocess_FILES_main += $(call gb_XcuModuleTarget_get_target,connectivity/registry/evoab2)/org/openoffice/Office/DataAccess/Drivers-evoab2.xcu +-postprocess_FILES_main += $(postprocess_MOD)/org/openoffice/Office/DataAccess-evoab2.xcu ++postprocess_XCDS += evoab.xcd ++postprocess_FILES_evoab += $(call gb_XcuModuleTarget_get_target,connectivity/registry/evoab2)/org/openoffice/Office/DataAccess/Drivers-evoab2.xcu ++postprocess_FILES_evoab += $(postprocess_MOD)/org/openoffice/Office/DataAccess-evoab2.xcu + postprocess_DRIVERS += evoab + endif + ifeq ($(ENABLE_JAVA),TRUE) +diff --git a/scp2/InstallModule_gnome.mk b/scp2/InstallModule_gnome.mk +index c33f4f52d67b..8f06c0273eff 100644 +--- a/scp2/InstallModule_gnome.mk ++++ b/scp2/InstallModule_gnome.mk +@@ -19,4 +19,8 @@ $(eval $(call gb_InstallModule_add_localized_scpfiles,scp2/gnome,\ + scp2/source/gnome/module_gnome \ + )) + ++$(eval $(call gb_InstallModule_define_if_set,scp2/gnome,\ ++ ENABLE_EVOAB2 \ ++)) ++ + # vim: set shiftwidth=4 tabstop=4 noexpandtab: diff --git a/debian/patches/system-officeotron-and-odfvalidator.diff b/debian/patches/system-officeotron-and-odfvalidator.diff new file mode 100644 index 00000000000..971608ef949 --- /dev/null +++ b/debian/patches/system-officeotron-and-odfvalidator.diff @@ -0,0 +1,16 @@ +diff --git a/bin/odfvalidator.sh.in b/bin/odfvalidator.sh.in +index 56e2f29..9415ef6 100644 +--- a/bin/odfvalidator.sh.in ++++ b/bin/odfvalidator.sh.in +@@ -1,2 +1,2 @@ + #!/usr/bin/env bash +-java -Djavax.xml.validation.SchemaFactory:http://relaxng.org/ns/structure/1.0=org.iso_relax.verifier.jaxp.validation.RELAXNGSchemaFactoryImpl -Dorg.iso_relax.verifier.VerifierFactoryLoader=com.sun.msv.verifier.jarv.FactoryLoaderImpl -jar @TARFILE_LOCATION@/@ODFVALIDATOR_JAR@ "$@" ++java -Djavax.xml.validation.SchemaFactory:http://relaxng.org/ns/structure/1.0=org.iso_relax.verifier.jaxp.validation.RELAXNGSchemaFactoryImpl -Dorg.iso_relax.verifier.VerifierFactoryLoader=com.sun.msv.verifier.jarv.FactoryLoaderImpl -jar /usr/share/java/odfvalidator.jar "$@" +diff --git a/bin/officeotron.sh.in b/bin/officeotron.sh.in +index 7281f1b..6eab5b5 100644 +--- a/bin/officeotron.sh.in ++++ b/bin/officeotron.sh.in +@@ -1,2 +1,2 @@ + #!/usr/bin/env bash +-java -jar @TARFILE_LOCATION@/@OFFICEOTRON_JAR@ "$@" ++java -jar /usr/share/java/officeotron.jar "$@" diff --git a/debian/patches/unowinreg-static-libgcc.diff b/debian/patches/unowinreg-static-libgcc.diff new file mode 100644 index 00000000000..d3e600f6ba9 --- /dev/null +++ b/debian/patches/unowinreg-static-libgcc.diff @@ -0,0 +1,13 @@ +diff --git a/odk/CustomTarget_unowinreg.mk b/odk/CustomTarget_unowinreg.mk +index 3a46ddfd6860..a847e1d6bb38 100644 +--- a/odk/CustomTarget_unowinreg.mk ++++ b/odk/CustomTarget_unowinreg.mk +@@ -19,7 +19,7 @@ $(call gb_CustomTarget_get_workdir,odk/unowinreg)/unowinreg.dll : \ + $(if $(filter FREEBSD,$(OS)),-I$(JAVA_HOME)/include/freebsd \ + -I$(JAVA_HOME)/include/bsd -I$(JAVA_HOME)/include/linux,\ + $(if $(filter NETBSD,$(OS)),-I$(JAVA_HOME)/include/netbsd))) \ +- -shared -o $@ $< \ ++ -shared -static-libgcc -o $@ $< \ + -Wl,--kill-at -lkernel32 -ladvapi32 && \ + $(MINGWSTRIP) $@ + diff --git a/debian/patches/use-mariadb-java-instead-of-mysql-java.diff b/debian/patches/use-mariadb-java-instead-of-mysql-java.diff new file mode 100644 index 00000000000..a88823c3989 --- /dev/null +++ b/debian/patches/use-mariadb-java-instead-of-mysql-java.diff @@ -0,0 +1,59 @@ +>From 1172166889764ae0e77488e5d173f33961b9859b Mon Sep 17 00:00:00 2001 +From: Markus Koschany +Date: Fri, 9 Nov 2018 23:06:15 +0100 +Subject: [PATCH] mariadb + +--- + connectivity/qa/complex/connectivity/JdbcLongVarCharTest.java | 4 ++-- + .../mysql/org/openoffice/Office/DataAccess/Drivers.xcu | 2 +- + connectivity/source/drivers/mysql/YDriver.cxx | 4 ++-- + 3 files changed, 5 insertions(+), 5 deletions(-) + +diff --git a/connectivity/qa/complex/connectivity/JdbcLongVarCharTest.java b/connectivity/qa/complex/connectivity/JdbcLongVarCharTest.java +index 3817add48da6..ace57bd35d98 100644 +--- a/connectivity/qa/complex/connectivity/JdbcLongVarCharTest.java ++++ b/connectivity/qa/complex/connectivity/JdbcLongVarCharTest.java +@@ -64,7 +64,7 @@ public class JdbcLongVarCharTest extends ComplexTestCase + */ + String url = System.getenv("CONNECTIVITY_TEST_MYSQL_DRIVER_JDBC"); + com.sun.star.beans.PropertyValue prop[] = new PropertyValue[1]; +- prop[0] = new PropertyValue("JavaDriverClass", 0, "com.mysql.jdbc.Driver", PropertyState.DIRECT_VALUE); ++ prop[0] = new PropertyValue("JavaDriverClass", 0, "org.mariadb.jdbc.Driver", PropertyState.DIRECT_VALUE); + + // get the remote office component context + XMultiServiceFactory xServiceManager = param.getMSF(); +diff --git a/connectivity/registry/mysql/org/openoffice/Office/DataAccess/Drivers.xcu b/connectivity/registry/mysql/org/openoffice/Office/DataAccess/Drivers.xcu +index 77988448f..acd8bfdaf 100644 +--- a/connectivity/registry/mysql_jdbc/org/openoffice/Office/DataAccess/Drivers.xcu ++++ b/connectivity/registry/mysql_jdbc/org/openoffice/Office/DataAccess/Drivers.xcu +@@ -33,7 +33,7 @@ + + + +- com.mysql.jdbc.Driver ++ org.mariadb.jdbc.Driver + + + +diff --git a/connectivity/source/drivers/mysql/YDriver.cxx b/connectivity/source/drivers/mysql/YDriver.cxx +index 95094265e..c0ad7802e 100644 +--- a/connectivity/source/drivers/mysql_jdbc/YDriver.cxx ++++ b/connectivity/source/drivers/mysql_jdbc/YDriver.cxx +@@ -54,7 +54,7 @@ namespace + OUString getJavaDriverClass(css::uno::Sequence const& info) + { + return comphelper::NamedValueCollection(info).getOrDefault("JavaDriverClass", +- OUString("com.mysql.jdbc.Driver")); ++ OUString("org.mariadb.jdbc.Driver")); + } + } + +@@ -170,7 +170,7 @@ Sequence lcl_convertProperties(T_DRIVERTYPE _eType, + if (!jdc) + { + aProps.push_back(PropertyValue("JavaDriverClass", 0, +- makeAny(OUString("com.mysql.jdbc.Driver")), ++ makeAny(OUString("org.mariadb.jdbc.Driver")), + PropertyState_DIRECT_VALUE)); + } + } diff --git a/debian/patches/xmlsecurity-XSecParser-confused-about-multiple-timestamps.diff b/debian/patches/xmlsecurity-XSecParser-confused-about-multiple-timestamps.diff new file mode 100644 index 00000000000..51327d5ee79 --- /dev/null +++ b/debian/patches/xmlsecurity-XSecParser-confused-about-multiple-timestamps.diff @@ -0,0 +1,393 @@ +From abe77c4fcb9ea97d9fff07eaea6d8863bcba5b02 Mon Sep 17 00:00:00 2001 +From: Michael Stahl +Date: Thu, 18 Feb 2021 19:22:31 +0100 +Subject: xmlsecurity: XSecParser confused about multiple timestamps +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +LO writes timestamp both to dc:date and xades:SigningTime elements. + +The parser tries to avoid reading multiple dc:date, preferring the first +one, but doesn't care about multiple xades:SigningTime, for undocumented +reasons. + +Ideally something should check all read values for consistency. + +Reviewed-on: https://gerrit.libreoffice.org/c/core/+/111160 +Tested-by: Jenkins +Reviewed-by: Michael Stahl +(cherry picked from commit 4ab8d9c09a5873ca0aea56dafa1ab34758d52ef7) + +xmlsecurity: remove XSecController::setPropertyId() + +Reviewed-on: https://gerrit.libreoffice.org/c/core/+/111252 +Tested-by: Jenkins +Reviewed-by: Michael Stahl +(cherry picked from commit d2a345e1163616fe3201ef1d6c758e2e819214e0) + +Change-Id: Ic018ee89797a1c8a4f870ae102af48006de930ef +Reviewed-on: https://gerrit.libreoffice.org/c/core/+/111908 +Tested-by: Jenkins +Reviewed-by: Caolán McNamara +--- + include/svl/sigstruct.hxx | 7 ++- + xmlsecurity/inc/xsecctl.hxx | 5 +- + xmlsecurity/source/helper/ooxmlsecparser.cxx | 4 +- + xmlsecurity/source/helper/xsecctl.cxx | 2 +- + xmlsecurity/source/helper/xsecparser.cxx | 81 ++++++++++++++-------------- + xmlsecurity/source/helper/xsecparser.hxx | 6 --- + xmlsecurity/source/helper/xsecsign.cxx | 4 +- + xmlsecurity/source/helper/xsecverify.cxx | 39 ++++++-------- + 8 files changed, 68 insertions(+), 80 deletions(-) + +diff --git a/include/svl/sigstruct.hxx b/include/svl/sigstruct.hxx +index 38c1ee5ed142..d62ecb09634c 100644 +--- a/include/svl/sigstruct.hxx ++++ b/include/svl/sigstruct.hxx +@@ -103,6 +103,9 @@ struct SignatureInformation + // XAdES EncapsulatedX509Certificate values + std::set maEncapsulatedX509Certificates; + ++ OUString ouSignatureId; ++ // signature may contain multiple time stamps - check they're consistent ++ bool hasInconsistentSigningTime = false; + //We also keep the date and time as string. This is done when this + //structure is created as a result of a XML signature being read. + //When then a signature is added or another removed, then the original +@@ -115,8 +118,8 @@ struct SignatureInformation + //and the converted time is written back, then the string looks different + //and the signature is broken. + OUString ouDateTime; +- OUString ouSignatureId; +- OUString ouPropertyId; ++ /// The Id attribute of the element that contains the . ++ OUString ouDateTimePropertyId; + /// Characters of the element inside the signature. + OUString ouDescription; + /// The Id attribute of the element that contains the . +diff --git a/xmlsecurity/inc/xsecctl.hxx b/xmlsecurity/inc/xsecctl.hxx +index 324f1c43388b..759a660d90ad 100644 +--- a/xmlsecurity/inc/xsecctl.hxx ++++ b/xmlsecurity/inc/xsecctl.hxx +@@ -271,8 +271,8 @@ private: + void setGpgCertificate( OUString const & ouGpgCert ); + void setGpgOwner( OUString const & ouGpgOwner ); + +- void setDate( OUString const & ouDate ); +- void setDescription(const OUString& rDescription); ++ void setDate(OUString const& rId, OUString const& ouDate); ++ void setDescription(OUString const& rId, OUString const& rDescription); + void setCertDigest(const OUString& rCertDigest); + void setValidSignatureImage(const OUString& rValidSigImg); + void setInvalidSignatureImage(const OUString& rInvalidSigImg); +@@ -283,7 +283,6 @@ public: + + private: + void setId( OUString const & ouId ); +- void setPropertyId( OUString const & ouPropertyId ); + + css::uno::Reference< css::xml::crypto::sax::XReferenceResolvedListener > prepareSignatureToRead( + sal_Int32 nSecurityId ); +diff --git a/xmlsecurity/source/helper/ooxmlsecparser.cxx b/xmlsecurity/source/helper/ooxmlsecparser.cxx +index c22e8c2261bf..a200de60c07a 100644 +--- a/xmlsecurity/source/helper/ooxmlsecparser.cxx ++++ b/xmlsecurity/source/helper/ooxmlsecparser.cxx +@@ -192,12 +192,12 @@ void SAL_CALL OOXMLSecParser::endElement(const OUString& rName) + } + else if (rName == "mdssi:Value") + { +- m_pXSecController->setDate(m_aMdssiValue); ++ m_pXSecController->setDate("", m_aMdssiValue); + m_bInMdssiValue = false; + } + else if (rName == "SignatureComments") + { +- m_pXSecController->setDescription(m_aSignatureComments); ++ m_pXSecController->setDescription("", m_aSignatureComments); + m_bInSignatureComments = false; + } + else if (rName == "X509IssuerName") +diff --git a/xmlsecurity/source/helper/xsecctl.cxx b/xmlsecurity/source/helper/xsecctl.cxx +index cac30006b6a7..e3df9a85f6da 100644 +--- a/xmlsecurity/source/helper/xsecctl.cxx ++++ b/xmlsecurity/source/helper/xsecctl.cxx +@@ -815,7 +815,7 @@ void XSecController::exportSignature( + pAttributeList = new SvXMLAttributeList(); + pAttributeList->AddAttribute( + "Id", +- signatureInfo.ouPropertyId); ++ signatureInfo.ouDateTimePropertyId); + pAttributeList->AddAttribute( + "Target", + "#" + signatureInfo.ouSignatureId); +diff --git a/xmlsecurity/source/helper/xsecparser.cxx b/xmlsecurity/source/helper/xsecparser.cxx +index 0aecb1854f8c..1418b7b43b46 100644 +--- a/xmlsecurity/source/helper/xsecparser.cxx ++++ b/xmlsecurity/source/helper/xsecparser.cxx +@@ -974,6 +974,9 @@ class XSecParser::XadesSigningCertificateContext + class XSecParser::XadesSigningTimeContext + : public XSecParser::Context + { ++ private: ++ OUString m_Value; ++ + public: + XadesSigningTimeContext(XSecParser & rParser, + std::unique_ptr pOldNamespaceMap) +@@ -981,20 +984,14 @@ class XSecParser::XadesSigningTimeContext + { + } + +- virtual void StartElement( +- css::uno::Reference const& /*xAttrs*/) override +- { +- m_rParser.m_ouDate.clear(); +- } +- + virtual void EndElement() override + { +- m_rParser.m_pXSecController->setDate( m_rParser.m_ouDate ); ++ m_rParser.m_pXSecController->setDate("", m_Value); + } + + virtual void Characters(OUString const& rChars) override + { +- m_rParser.m_ouDate += rChars; ++ m_Value += rChars; + } + }; + +@@ -1100,35 +1097,20 @@ class XSecParser::DcDateContext + : public XSecParser::Context + { + private: +- bool m_isIgnore = false; ++ OUString & m_rValue; + + public: + DcDateContext(XSecParser & rParser, +- std::unique_ptr pOldNamespaceMap) ++ std::unique_ptr pOldNamespaceMap, ++ OUString & rValue) + : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) ++ , m_rValue(rValue) + { + } + +- virtual void StartElement( +- css::uno::Reference const& /*xAttrs*/) override +- { +- m_isIgnore = !m_rParser.m_ouDate.isEmpty(); +- } +- +- virtual void EndElement() override +- { +- if (!m_isIgnore) +- { +- m_rParser.m_pXSecController->setDate( m_rParser.m_ouDate ); +- } +- } +- + virtual void Characters(OUString const& rChars) override + { +- if (!m_isIgnore) +- { +- m_rParser.m_ouDate += rChars; +- } ++ m_rValue += rChars; + } + }; + +@@ -1136,29 +1118,32 @@ class XSecParser::DcDescriptionContext + : public XSecParser::Context + { + private: +- OUString m_Value; ++ OUString & m_rValue; + + public: + DcDescriptionContext(XSecParser & rParser, +- std::unique_ptr pOldNamespaceMap) ++ std::unique_ptr pOldNamespaceMap, ++ OUString & rValue) + : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) ++ , m_rValue(rValue) + { + } + +- virtual void EndElement() override +- { +- m_rParser.m_pXSecController->setDescription(m_Value); +- } +- + virtual void Characters(OUString const& rChars) override + { +- m_Value += rChars; ++ m_rValue += rChars; + } + }; + + class XSecParser::DsSignaturePropertyContext + : public XSecParser::Context + { ++ private: ++ enum class SignatureProperty { Unknown, Date, Description }; ++ SignatureProperty m_Property = SignatureProperty::Unknown; ++ OUString m_Id; ++ OUString m_Value; ++ + public: + DsSignaturePropertyContext(XSecParser & rParser, + std::unique_ptr pOldNamespaceMap) +@@ -1169,10 +1154,22 @@ class XSecParser::DsSignaturePropertyContext + virtual void StartElement( + css::uno::Reference const& xAttrs) override + { +- OUString const ouIdAttr(m_rParser.HandleIdAttr(xAttrs)); +- if (!ouIdAttr.isEmpty()) ++ m_Id = m_rParser.HandleIdAttr(xAttrs); ++ } ++ ++ virtual void EndElement() override ++ { ++ switch (m_Property) + { +- m_rParser.m_pXSecController->setPropertyId( ouIdAttr ); ++ case SignatureProperty::Unknown: ++ SAL_INFO("xmlsecurity.helper", "Unknown property in ds:Object ignored"); ++ break; ++ case SignatureProperty::Date: ++ m_rParser.m_pXSecController->setDate(m_Id, m_Value); ++ break; ++ case SignatureProperty::Description: ++ m_rParser.m_pXSecController->setDescription(m_Id, m_Value); ++ break; + } + } + +@@ -1182,11 +1179,13 @@ class XSecParser::DsSignaturePropertyContext + { + if (nNamespace == XML_NAMESPACE_DC && rName == "date") + { +- return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); ++ m_Property = SignatureProperty::Date; ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap), m_Value); + } + if (nNamespace == XML_NAMESPACE_DC && rName == "description") + { +- return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); ++ m_Property = SignatureProperty::Description; ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap), m_Value); + } + return XSecParser::Context::CreateChildContext(std::move(pOldNamespaceMap), nNamespace, rName); + } +diff --git a/xmlsecurity/source/helper/xsecparser.hxx b/xmlsecurity/source/helper/xsecparser.hxx +index 93efcb766e3e..7a0eb08bca28 100644 +--- a/xmlsecurity/source/helper/xsecparser.hxx ++++ b/xmlsecurity/source/helper/xsecparser.hxx +@@ -97,12 +97,6 @@ private: + class DsSignatureContext; + class DsigSignaturesContext; + +- /* +- * the following members are used to reserve the signature information, +- * including X509IssuerName, X509SerialNumber, and X509Certificate,etc. +- */ +- OUString m_ouDate; +- + std::stack> m_ContextStack; + std::unique_ptr m_pNamespaceMap; + +diff --git a/xmlsecurity/source/helper/xsecsign.cxx b/xmlsecurity/source/helper/xsecsign.cxx +index b9648ed64397..1e1688767f00 100644 +--- a/xmlsecurity/source/helper/xsecsign.cxx ++++ b/xmlsecurity/source/helper/xsecsign.cxx +@@ -128,8 +128,8 @@ css::uno::Reference< css::xml::crypto::sax::XReferenceResolvedListener > XSecCon + if (nStorageFormat != embed::StorageFormats::OFOPXML) + { + internalSignatureInfor.signatureInfor.ouSignatureId = createId(); +- internalSignatureInfor.signatureInfor.ouPropertyId = createId(); +- internalSignatureInfor.addReference(SignatureReferenceType::SAMEDOCUMENT, digestID, internalSignatureInfor.signatureInfor.ouPropertyId, -1, OUString() ); ++ internalSignatureInfor.signatureInfor.ouDateTimePropertyId = createId(); ++ internalSignatureInfor.addReference(SignatureReferenceType::SAMEDOCUMENT, digestID, internalSignatureInfor.signatureInfor.ouDateTimePropertyId, -1, OUString() ); + size++; + + if (bXAdESCompliantIfODF) +diff --git a/xmlsecurity/source/helper/xsecverify.cxx b/xmlsecurity/source/helper/xsecverify.cxx +index c826971b1c7d..cdca811cc2cb 100644 +--- a/xmlsecurity/source/helper/xsecverify.cxx ++++ b/xmlsecurity/source/helper/xsecverify.cxx +@@ -317,7 +317,7 @@ void XSecController::setGpgOwner( OUString const & ouGpgOwner ) + isi.signatureInfor.ouGpgOwner = ouGpgOwner; + } + +-void XSecController::setDate( OUString const & ouDate ) ++void XSecController::setDate(OUString const& rId, OUString const& ouDate) + { + if (m_vInternalSignatureInformations.empty()) + { +@@ -325,17 +325,31 @@ void XSecController::setDate( OUString const & ouDate ) + return; + } + InternalSignatureInformation &isi = m_vInternalSignatureInformations.back(); ++ // there may be multiple timestamps in a signature - check them for consistency ++ if (!isi.signatureInfor.ouDateTime.isEmpty() ++ && isi.signatureInfor.ouDateTime != ouDate) ++ { ++ isi.signatureInfor.hasInconsistentSigningTime = true; ++ } + (void)utl::ISO8601parseDateTime( ouDate, isi.signatureInfor.stDateTime); + isi.signatureInfor.ouDateTime = ouDate; ++ if (!rId.isEmpty()) ++ { ++ isi.signatureInfor.ouDateTimePropertyId = rId; ++ } + } + +-void XSecController::setDescription(const OUString& rDescription) ++void XSecController::setDescription(OUString const& rId, OUString const& rDescription) + { + if (m_vInternalSignatureInformations.empty()) + return; + + InternalSignatureInformation& rInformation = m_vInternalSignatureInformations.back(); + rInformation.signatureInfor.ouDescription = rDescription; ++ if (!rId.isEmpty()) ++ { ++ rInformation.signatureInfor.ouDescriptionPropertyId = rId; ++ } + } + + void XSecController::setSignatureBytes(const uno::Sequence& rBytes) +@@ -429,27 +443,6 @@ void XSecController::setId( OUString const & ouId ) + isi.signatureInfor.ouSignatureId = ouId; + } + +-void XSecController::setPropertyId( OUString const & ouPropertyId ) +-{ +- if (m_vInternalSignatureInformations.empty()) +- { +- SAL_INFO("xmlsecurity.helper","XSecController::setPropertyId: no signature"); +- return; +- } +- InternalSignatureInformation &isi = m_vInternalSignatureInformations.back(); +- +- if (isi.signatureInfor.ouPropertyId.isEmpty()) +- { +- // ID attribute is for the date. +- isi.signatureInfor.ouPropertyId = ouPropertyId; +- } +- else +- { +- // ID attribute is for the description. +- isi.signatureInfor.ouDescriptionPropertyId = ouPropertyId; +- } +-} +- + /* public: for signature verify */ + void XSecController::collectToVerify( const OUString& referenceId ) + { +-- +cgit v1.2.1 + diff --git a/debian/patches/xmlsecurity-ignore-elements-in-ds:Object-that-arent-signed.diff b/debian/patches/xmlsecurity-ignore-elements-in-ds:Object-that-arent-signed.diff new file mode 100644 index 00000000000..5e0a9d7ee00 --- /dev/null +++ b/debian/patches/xmlsecurity-ignore-elements-in-ds:Object-that-arent-signed.diff @@ -0,0 +1,740 @@ +From 94ce59dd02fcfcaa1eb4f195b45a9a2edbd58242 Mon Sep 17 00:00:00 2001 +From: Michael Stahl +Date: Fri, 19 Feb 2021 17:56:21 +0100 +Subject: xmlsecurity: ignore elements in ds:Object that aren't signed +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Change-Id: I2e4411f0907b89e7ad6e0185cee8f12b600515e8 +Reviewed-on: https://gerrit.libreoffice.org/c/core/+/111253 +Tested-by: Jenkins +Reviewed-by: Michael Stahl +(cherry picked from commit 2bfa00e6bf4b2a310a8b8f5060acec85b5f7a3ce) +Reviewed-on: https://gerrit.libreoffice.org/c/core/+/111909 +Reviewed-by: Caolán McNamara +--- + xmlsecurity/inc/xsecctl.hxx | 1 + + xmlsecurity/source/helper/xsecparser.cxx | 290 +++++++++++++++++++++---------- + xmlsecurity/source/helper/xsecparser.hxx | 1 + + xmlsecurity/source/helper/xsecverify.cxx | 19 ++ + 4 files changed, 221 insertions(+), 90 deletions(-) + +diff --git a/xmlsecurity/inc/xsecctl.hxx b/xmlsecurity/inc/xsecctl.hxx +index 759a660d90ad..ec3669128d24 100644 +--- a/xmlsecurity/inc/xsecctl.hxx ++++ b/xmlsecurity/inc/xsecctl.hxx +@@ -252,6 +252,7 @@ private: + /// Sets algorithm from . + void setSignatureMethod(svl::crypto::SignatureMethodAlgorithm eAlgorithmID); + void switchGpgSignature(); ++ bool haveReferenceForId(OUString const& rId) const; + void addReference( + const OUString& ouUri, + sal_Int32 nDigestID, +diff --git a/xmlsecurity/source/helper/xsecparser.cxx b/xmlsecurity/source/helper/xsecparser.cxx +index 1418b7b43b46..f46277f96ea1 100644 +--- a/xmlsecurity/source/helper/xsecparser.cxx ++++ b/xmlsecurity/source/helper/xsecparser.cxx +@@ -95,6 +95,42 @@ auto XSecParser::Context::CreateChildContext( + return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); + } + ++/** ++note: anything in ds:Object should be trusted *only* if there is a ds:Reference ++ to it so it is signed (exception: the xades:EncapsulatedX509Certificate). ++ ds:SignedInfo precedes all ds:Object. ++ ++ There may be multiple ds:Signature for purpose of counter-signatures ++ but the way XAdES describes these, only the ds:SignatureValue element ++ would be referenced, so requiring a ds:Reference for anything in ++ ds:Object shouldn't cause issues. ++ */ ++class XSecParser::ReferencedContextImpl ++ : public XSecParser::Context ++{ ++ protected: ++ bool m_isReferenced; ++ ++ public: ++ ReferencedContextImpl(XSecParser & rParser, ++ std::unique_ptr pOldNamespaceMap, ++ bool const isReferenced) ++ : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) ++ , m_isReferenced(isReferenced) ++ { ++ } ++ ++ OUString CheckIdAttrReferenced(css::uno::Reference const& xAttrs) ++ { ++ OUString const id(m_rParser.HandleIdAttr(xAttrs)); ++ if (!id.isEmpty() && m_rParser.m_pXSecController->haveReferenceForId(id)) ++ { ++ m_isReferenced = true; ++ } ++ return id; ++ } ++}; ++ + class XSecParser::LoPGPOwnerContext + : public XSecParser::Context + { +@@ -228,21 +264,29 @@ class XSecParser::DsX509CertificateContext + }; + + class XSecParser::DsX509SerialNumberContext +- : public XSecParser::Context ++ : public XSecParser::ReferencedContextImpl + { + private: + OUString m_Value; + + public: + DsX509SerialNumberContext(XSecParser & rParser, +- std::unique_ptr pOldNamespaceMap) +- : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) ++ std::unique_ptr pOldNamespaceMap, ++ bool const isReferenced) ++ : ReferencedContextImpl(rParser, std::move(pOldNamespaceMap), isReferenced) + { + } + + virtual void EndElement() override + { +- m_rParser.m_pXSecController->setX509SerialNumber(m_Value); ++ if (m_isReferenced) ++ { ++ m_rParser.m_pXSecController->setX509SerialNumber(m_Value); ++ } ++ else ++ { ++ SAL_INFO("xmlsecurity.helper", "ignoring unsigned X509SerialNumber"); ++ } + } + + virtual void Characters(OUString const& rChars) override +@@ -252,21 +296,29 @@ class XSecParser::DsX509SerialNumberContext + }; + + class XSecParser::DsX509IssuerNameContext +- : public XSecParser::Context ++ : public XSecParser::ReferencedContextImpl + { + private: + OUString m_Value; + + public: + DsX509IssuerNameContext(XSecParser & rParser, +- std::unique_ptr pOldNamespaceMap) +- : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) ++ std::unique_ptr pOldNamespaceMap, ++ bool const isReferenced) ++ : ReferencedContextImpl(rParser, std::move(pOldNamespaceMap), isReferenced) + { + } + + virtual void EndElement() override + { +- m_rParser.m_pXSecController->setX509IssuerName(m_Value); ++ if (m_isReferenced) ++ { ++ m_rParser.m_pXSecController->setX509IssuerName(m_Value); ++ } ++ else ++ { ++ SAL_INFO("xmlsecurity.helper", "ignoring unsigned X509IssuerName"); ++ } + } + + virtual void Characters(OUString const& rChars) override +@@ -276,12 +328,13 @@ class XSecParser::DsX509IssuerNameContext + }; + + class XSecParser::DsX509IssuerSerialContext +- : public XSecParser::Context ++ : public XSecParser::ReferencedContextImpl + { + public: + DsX509IssuerSerialContext(XSecParser & rParser, +- std::unique_ptr pOldNamespaceMap) +- : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) ++ std::unique_ptr pOldNamespaceMap, ++ bool const isReferenced) ++ : ReferencedContextImpl(rParser, std::move(pOldNamespaceMap), isReferenced) + { + } + +@@ -291,11 +344,11 @@ class XSecParser::DsX509IssuerSerialContext + { + if (nNamespace == XML_NAMESPACE_DS && rName == "X509IssuerName") + { +- return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap), m_isReferenced); + } + if (nNamespace == XML_NAMESPACE_DS && rName == "X509SerialNumber") + { +- return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap), m_isReferenced); + } + // missing: ds:X509SKI, ds:X509SubjectName, ds:X509CRL + return XSecParser::Context::CreateChildContext(std::move(pOldNamespaceMap), nNamespace, rName); +@@ -318,7 +371,8 @@ class XSecParser::DsX509DataContext + { + if (nNamespace == XML_NAMESPACE_DS && rName == "X509IssuerSerial") + { +- return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); ++ // can't require KeyInfo to be signed so pass in *true* ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap), true); + } + if (nNamespace == XML_NAMESPACE_DS && rName == "X509Certificate") + { +@@ -787,21 +841,29 @@ class XSecParser::XadesUnsignedPropertiesContext + }; + + class XSecParser::LoSignatureLineIdContext +- : public XSecParser::Context ++ : public XSecParser::ReferencedContextImpl + { + private: + OUString m_Value; + + public: + LoSignatureLineIdContext(XSecParser & rParser, +- std::unique_ptr pOldNamespaceMap) +- : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) ++ std::unique_ptr pOldNamespaceMap, ++ bool const isReferenced) ++ : ReferencedContextImpl(rParser, std::move(pOldNamespaceMap), isReferenced) + { + } + + virtual void EndElement() override + { +- m_rParser.m_pXSecController->setSignatureLineId(m_Value); ++ if (m_isReferenced) ++ { ++ m_rParser.m_pXSecController->setSignatureLineId(m_Value); ++ } ++ else ++ { ++ SAL_INFO("xmlsecurity.helper", "ignoring unsigned SignatureLineId"); ++ } + } + + virtual void Characters(OUString const& rChars) override +@@ -811,21 +873,29 @@ class XSecParser::LoSignatureLineIdContext + }; + + class XSecParser::LoSignatureLineValidImageContext +- : public XSecParser::Context ++ : public XSecParser::ReferencedContextImpl + { + private: + OUString m_Value; + + public: + LoSignatureLineValidImageContext(XSecParser & rParser, +- std::unique_ptr pOldNamespaceMap) +- : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) ++ std::unique_ptr pOldNamespaceMap, ++ bool const isReferenced) ++ : ReferencedContextImpl(rParser, std::move(pOldNamespaceMap), isReferenced) + { + } + + virtual void EndElement() override + { +- m_rParser.m_pXSecController->setValidSignatureImage(m_Value); ++ if (m_isReferenced) ++ { ++ m_rParser.m_pXSecController->setValidSignatureImage(m_Value); ++ } ++ else ++ { ++ SAL_INFO("xmlsecurity.helper", "ignoring unsigned SignatureLineValidImage"); ++ } + } + + virtual void Characters(OUString const& rChars) override +@@ -835,21 +905,29 @@ class XSecParser::LoSignatureLineValidImageContext + }; + + class XSecParser::LoSignatureLineInvalidImageContext +- : public XSecParser::Context ++ : public XSecParser::ReferencedContextImpl + { + private: + OUString m_Value; + + public: + LoSignatureLineInvalidImageContext(XSecParser & rParser, +- std::unique_ptr pOldNamespaceMap) +- : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) ++ std::unique_ptr pOldNamespaceMap, ++ bool const isReferenced) ++ : ReferencedContextImpl(rParser, std::move(pOldNamespaceMap), isReferenced) + { + } + + virtual void EndElement() override + { +- m_rParser.m_pXSecController->setInvalidSignatureImage(m_Value); ++ if (m_isReferenced) ++ { ++ m_rParser.m_pXSecController->setInvalidSignatureImage(m_Value); ++ } ++ else ++ { ++ SAL_INFO("xmlsecurity.helper", "ignoring unsigned SignatureLineInvalidImage"); ++ } + } + + virtual void Characters(OUString const& rChars) override +@@ -859,12 +937,13 @@ class XSecParser::LoSignatureLineInvalidImageContext + }; + + class XSecParser::LoSignatureLineContext +- : public XSecParser::Context ++ : public XSecParser::ReferencedContextImpl + { + public: + LoSignatureLineContext(XSecParser & rParser, +- std::unique_ptr pOldNamespaceMap) +- : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) ++ std::unique_ptr pOldNamespaceMap, ++ bool const isReferenced) ++ : ReferencedContextImpl(rParser, std::move(pOldNamespaceMap), isReferenced) + { + } + +@@ -874,22 +953,22 @@ class XSecParser::LoSignatureLineContext + { + if (nNamespace == XML_NAMESPACE_LO_EXT && rName == "SignatureLineId") + { +- return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap), m_isReferenced); + } + if (nNamespace == XML_NAMESPACE_LO_EXT && rName == "SignatureLineValidImage") + { +- return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap), m_isReferenced); + } + if (nNamespace == XML_NAMESPACE_LO_EXT && rName == "SignatureLineInvalidImage") + { +- return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap), m_isReferenced); + } + return XSecParser::Context::CreateChildContext(std::move(pOldNamespaceMap), nNamespace, rName); + } + }; + + class XSecParser::XadesCertDigestContext +- : public XSecParser::Context ++ : public XSecParser::ReferencedContextImpl + { + private: + OUString m_Value; +@@ -897,14 +976,22 @@ class XSecParser::XadesCertDigestContext + + public: + XadesCertDigestContext(XSecParser & rParser, +- std::unique_ptr pOldNamespaceMap) +- : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) ++ std::unique_ptr pOldNamespaceMap, ++ bool const isReferenced) ++ : ReferencedContextImpl(rParser, std::move(pOldNamespaceMap), isReferenced) + { + } + + virtual void EndElement() override + { +- m_rParser.m_pXSecController->setCertDigest(m_Value/* FIXME , m_nReferenceDigestID*/); ++ if (m_isReferenced) ++ { ++ m_rParser.m_pXSecController->setCertDigest(m_Value/* FIXME , m_nReferenceDigestID*/); ++ } ++ else ++ { ++ SAL_INFO("xmlsecurity.helper", "ignoring unsigned CertDigest"); ++ } + } + + virtual std::unique_ptr CreateChildContext( +@@ -924,12 +1011,13 @@ class XSecParser::XadesCertDigestContext + }; + + class XSecParser::XadesCertContext +- : public XSecParser::Context ++ : public XSecParser::ReferencedContextImpl + { + public: + XadesCertContext(XSecParser & rParser, +- std::unique_ptr pOldNamespaceMap) +- : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) ++ std::unique_ptr pOldNamespaceMap, ++ bool const isReferenced) ++ : ReferencedContextImpl(rParser, std::move(pOldNamespaceMap), isReferenced) + { + } + +@@ -939,23 +1027,24 @@ class XSecParser::XadesCertContext + { + if (nNamespace == XML_NAMESPACE_XADES132 && rName == "CertDigest") + { +- return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap), m_isReferenced); + } + if (nNamespace == XML_NAMESPACE_XADES132 && rName == "IssuerSerial") + { +- return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap), m_isReferenced); + } + return XSecParser::Context::CreateChildContext(std::move(pOldNamespaceMap), nNamespace, rName); + } + }; + + class XSecParser::XadesSigningCertificateContext +- : public XSecParser::Context ++ : public XSecParser::ReferencedContextImpl + { + public: + XadesSigningCertificateContext(XSecParser & rParser, +- std::unique_ptr pOldNamespaceMap) +- : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) ++ std::unique_ptr pOldNamespaceMap, ++ bool const isReferenced) ++ : ReferencedContextImpl(rParser, std::move(pOldNamespaceMap), isReferenced) + { + } + +@@ -965,28 +1054,36 @@ class XSecParser::XadesSigningCertificateContext + { + if (nNamespace == XML_NAMESPACE_XADES132 && rName == "Cert") + { +- return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap), m_isReferenced); + } + return XSecParser::Context::CreateChildContext(std::move(pOldNamespaceMap), nNamespace, rName); + } + }; + + class XSecParser::XadesSigningTimeContext +- : public XSecParser::Context ++ : public XSecParser::ReferencedContextImpl + { + private: + OUString m_Value; + + public: + XadesSigningTimeContext(XSecParser & rParser, +- std::unique_ptr pOldNamespaceMap) +- : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) ++ std::unique_ptr pOldNamespaceMap, ++ bool const isReferenced) ++ : ReferencedContextImpl(rParser, std::move(pOldNamespaceMap), isReferenced) + { + } + + virtual void EndElement() override + { +- m_rParser.m_pXSecController->setDate("", m_Value); ++ if (m_isReferenced) ++ { ++ m_rParser.m_pXSecController->setDate("", m_Value); ++ } ++ else ++ { ++ SAL_INFO("xmlsecurity.helper", "ignoring unsigned SigningTime"); ++ } + } + + virtual void Characters(OUString const& rChars) override +@@ -996,19 +1093,20 @@ class XSecParser::XadesSigningTimeContext + }; + + class XSecParser::XadesSignedSignaturePropertiesContext +- : public XSecParser::Context ++ : public XSecParser::ReferencedContextImpl + { + public: + XadesSignedSignaturePropertiesContext(XSecParser & rParser, +- std::unique_ptr pOldNamespaceMap) +- : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) ++ std::unique_ptr pOldNamespaceMap, ++ bool const isReferenced) ++ : ReferencedContextImpl(rParser, std::move(pOldNamespaceMap), isReferenced) + { + } + + virtual void StartElement( + css::uno::Reference const& xAttrs) override + { +- m_rParser.HandleIdAttr(xAttrs); ++ CheckIdAttrReferenced(xAttrs); + } + + virtual std::unique_ptr CreateChildContext( +@@ -1017,15 +1115,15 @@ class XSecParser::XadesSignedSignaturePropertiesContext + { + if (nNamespace == XML_NAMESPACE_XADES132 && rName == "SigningTime") + { +- return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap), m_isReferenced); + } + if (nNamespace == XML_NAMESPACE_XADES132 && rName == "SigningCertificate") + { +- return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap), m_isReferenced); + } + if (nNamespace == XML_NAMESPACE_LO_EXT && rName == "SignatureLine") + { +- return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap), m_isReferenced); + } + // missing: xades:SignaturePolicyIdentifier, xades:SignatureProductionPlace, xades:SignerRole + return XSecParser::Context::CreateChildContext(std::move(pOldNamespaceMap), nNamespace, rName); +@@ -1033,19 +1131,20 @@ class XSecParser::XadesSignedSignaturePropertiesContext + }; + + class XSecParser::XadesSignedPropertiesContext +- : public XSecParser::Context ++ : public XSecParser::ReferencedContextImpl + { + public: + XadesSignedPropertiesContext(XSecParser & rParser, +- std::unique_ptr pOldNamespaceMap) +- : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) ++ std::unique_ptr pOldNamespaceMap, ++ bool const isReferenced) ++ : ReferencedContextImpl(rParser, std::move(pOldNamespaceMap), isReferenced) + { + } + + virtual void StartElement( + css::uno::Reference const& xAttrs) override + { +- m_rParser.HandleIdAttr(xAttrs); ++ CheckIdAttrReferenced(xAttrs); + } + + virtual std::unique_ptr CreateChildContext( +@@ -1054,7 +1153,7 @@ class XSecParser::XadesSignedPropertiesContext + { + if (nNamespace == XML_NAMESPACE_XADES132 && rName == "SignedSignatureProperties") + { +- return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap), m_isReferenced); + } + // missing: xades:SignedDataObjectProperties + return XSecParser::Context::CreateChildContext(std::move(pOldNamespaceMap), nNamespace, rName); +@@ -1062,19 +1161,20 @@ class XSecParser::XadesSignedPropertiesContext + }; + + class XSecParser::XadesQualifyingPropertiesContext +- : public XSecParser::Context ++ : public XSecParser::ReferencedContextImpl + { + public: + XadesQualifyingPropertiesContext(XSecParser & rParser, +- std::unique_ptr pOldNamespaceMap) +- : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) ++ std::unique_ptr pOldNamespaceMap, ++ bool const isReferenced) ++ : ReferencedContextImpl(rParser, std::move(pOldNamespaceMap), isReferenced) + { + } + + virtual void StartElement( + css::uno::Reference const& xAttrs) override + { +- m_rParser.HandleIdAttr(xAttrs); ++ CheckIdAttrReferenced(xAttrs); + } + + virtual std::unique_ptr CreateChildContext( +@@ -1083,7 +1183,7 @@ class XSecParser::XadesQualifyingPropertiesContext + { + if (nNamespace == XML_NAMESPACE_XADES132 && rName == "SignedProperties") + { +- return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap), m_isReferenced); + } + if (nNamespace == XML_NAMESPACE_XADES132 && rName == "UnsignedProperties") + { +@@ -1136,7 +1236,7 @@ class XSecParser::DcDescriptionContext + }; + + class XSecParser::DsSignaturePropertyContext +- : public XSecParser::Context ++ : public XSecParser::ReferencedContextImpl + { + private: + enum class SignatureProperty { Unknown, Date, Description }; +@@ -1146,30 +1246,38 @@ class XSecParser::DsSignaturePropertyContext + + public: + DsSignaturePropertyContext(XSecParser & rParser, +- std::unique_ptr pOldNamespaceMap) +- : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) ++ std::unique_ptr pOldNamespaceMap, ++ bool const isReferenced) ++ : ReferencedContextImpl(rParser, std::move(pOldNamespaceMap), isReferenced) + { + } + + virtual void StartElement( + css::uno::Reference const& xAttrs) override + { +- m_Id = m_rParser.HandleIdAttr(xAttrs); ++ m_Id = CheckIdAttrReferenced(xAttrs); + } + + virtual void EndElement() override + { +- switch (m_Property) ++ if (m_isReferenced) ++ { ++ switch (m_Property) ++ { ++ case SignatureProperty::Unknown: ++ SAL_INFO("xmlsecurity.helper", "Unknown property in ds:Object ignored"); ++ break; ++ case SignatureProperty::Date: ++ m_rParser.m_pXSecController->setDate(m_Id, m_Value); ++ break; ++ case SignatureProperty::Description: ++ m_rParser.m_pXSecController->setDescription(m_Id, m_Value); ++ break; ++ } ++ } ++ else + { +- case SignatureProperty::Unknown: +- SAL_INFO("xmlsecurity.helper", "Unknown property in ds:Object ignored"); +- break; +- case SignatureProperty::Date: +- m_rParser.m_pXSecController->setDate(m_Id, m_Value); +- break; +- case SignatureProperty::Description: +- m_rParser.m_pXSecController->setDescription(m_Id, m_Value); +- break; ++ SAL_INFO("xmlsecurity.helper", "ignoring unsigned SignatureProperty"); + } + } + +@@ -1192,19 +1300,20 @@ class XSecParser::DsSignaturePropertyContext + }; + + class XSecParser::DsSignaturePropertiesContext +- : public XSecParser::Context ++ : public XSecParser::ReferencedContextImpl + { + public: + DsSignaturePropertiesContext(XSecParser & rParser, +- std::unique_ptr pOldNamespaceMap) +- : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) ++ std::unique_ptr pOldNamespaceMap, ++ bool const isReferenced) ++ : ReferencedContextImpl(rParser, std::move(pOldNamespaceMap), isReferenced) + { + } + + virtual void StartElement( + css::uno::Reference const& xAttrs) override + { +- m_rParser.HandleIdAttr(xAttrs); ++ CheckIdAttrReferenced(xAttrs); + } + + virtual std::unique_ptr CreateChildContext( +@@ -1213,26 +1322,27 @@ class XSecParser::DsSignaturePropertiesContext + { + if (nNamespace == XML_NAMESPACE_DS && rName == "SignatureProperty") + { +- return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap), m_isReferenced); + } + return XSecParser::Context::CreateChildContext(std::move(pOldNamespaceMap), nNamespace, rName); + } + }; + + class XSecParser::DsObjectContext +- : public XSecParser::Context ++ : public XSecParser::ReferencedContextImpl + { + public: + DsObjectContext(XSecParser & rParser, + std::unique_ptr pOldNamespaceMap) +- : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) ++ // init with "false" here - the Signature element can't be referenced by its child ++ : XSecParser::ReferencedContextImpl(rParser, std::move(pOldNamespaceMap), false) + { + } + + virtual void StartElement( + css::uno::Reference const& xAttrs) override + { +- m_rParser.HandleIdAttr(xAttrs); ++ CheckIdAttrReferenced(xAttrs); + } + + virtual std::unique_ptr CreateChildContext( +@@ -1241,11 +1351,11 @@ class XSecParser::DsObjectContext + { + if (nNamespace == XML_NAMESPACE_DS && rName == "SignatureProperties") + { +- return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap), m_isReferenced); + } + if (nNamespace == XML_NAMESPACE_XADES132 && rName == "QualifyingProperties") + { +- return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap), m_isReferenced); + } + // missing: ds:Manifest + return XSecParser::Context::CreateChildContext(std::move(pOldNamespaceMap), nNamespace, rName); +diff --git a/xmlsecurity/source/helper/xsecparser.hxx b/xmlsecurity/source/helper/xsecparser.hxx +index 7a0eb08bca28..7674bf28b84d 100644 +--- a/xmlsecurity/source/helper/xsecparser.hxx ++++ b/xmlsecurity/source/helper/xsecparser.hxx +@@ -56,6 +56,7 @@ public: + class Context; + private: + class UnknownContext; ++ class ReferencedContextImpl; + class LoPGPOwnerContext; + class DsPGPKeyPacketContext; + class DsPGPKeyIDContext; +diff --git a/xmlsecurity/source/helper/xsecverify.cxx b/xmlsecurity/source/helper/xsecverify.cxx +index cdca811cc2cb..92ebfb6c72e8 100644 +--- a/xmlsecurity/source/helper/xsecverify.cxx ++++ b/xmlsecurity/source/helper/xsecverify.cxx +@@ -143,6 +143,25 @@ void XSecController::switchGpgSignature() + #endif + } + ++bool XSecController::haveReferenceForId(OUString const& rId) const ++{ ++ if (m_vInternalSignatureInformations.empty()) ++ { ++ SAL_INFO("xmlsecurity.helper","XSecController::haveReferenceForId: no signature"); ++ return false; ++ } ++ InternalSignatureInformation const& rIsi(m_vInternalSignatureInformations.back()); ++ for (SignatureReferenceInformation const& rSri : rIsi.signatureInfor.vSignatureReferenceInfors) ++ { ++ if (rSri.nType == SignatureReferenceType::SAMEDOCUMENT ++ && rSri.ouURI == rId) // ouUri has # stripped ++ { ++ return true; ++ } ++ } ++ return false; ++} ++ + void XSecController::addReference( const OUString& ouUri, sal_Int32 nDigestID, const OUString& ouType ) + { + if (m_vInternalSignatureInformations.empty()) +-- +cgit v1.2.1 + diff --git a/debian/patches/xmlsecurity-improve-handling-of-multiple-X509Data-elements.diff b/debian/patches/xmlsecurity-improve-handling-of-multiple-X509Data-elements.diff new file mode 100644 index 00000000000..988574269a9 --- /dev/null +++ b/debian/patches/xmlsecurity-improve-handling-of-multiple-X509Data-elements.diff @@ -0,0 +1,1597 @@ +From a1cf770c2d7ca3e153e0b1f01ddcc313bc2bed7f Mon Sep 17 00:00:00 2001 +From: Michael Stahl +Date: Thu, 25 Feb 2021 14:17:48 +0100 +Subject: xmlsecurity: improve handling of multiple X509Data elements +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Combine everything related to a certificate in a new struct X509Data. + +The CertDigest is not actually written in the X509Data element but in +xades:Cert, so try to find the matching entry in +XSecController::setX509CertDigest(). + +There was a confusing interaction with PGP signatures, where ouGpgKeyID +was used for import, but export wrote the value from ouCertDigest +instead - this needed fixing. + +The main point of this is enforcing a constraint from xmldsig-core 4.5.4: + + All certificates appearing in an X509Data element MUST relate to the + validation key by either containing it or being part of a certification + chain that terminates in a certificate containing the validation key. + +Reviewed-on: https://gerrit.libreoffice.org/c/core/+/111254 +Tested-by: Jenkins +Reviewed-by: Michael Stahl +(cherry picked from commit 9e82509b09f5fe2eb77bcdb8fd193c71923abb67) + +xmlsecurity: improve handling of multiple certificates per X509Data + +It turns out that an X509Data element can contain an arbitrary number of +each of its child elements. + +How exactly certificates of an issuer chain may or should be distributed +across multiple X509Data elements isn't terribly obvious. + +One thing that is clear is that any element that refers to or contains +one particular certificate has to be a child of the same X509Data +element, although in no particular order, so try to match the 2 such +elements that the parser supports in XSecController::setX509Data(). + +Presumably the only way it makes sense to have multiple signing +certificates is if they all contain the same key but are signed by +different CAs. This case isn't handled currently; CheckX509Data() will +complain there's not a single chain and validation of the certificates +will fail. + +Reviewed-on: https://gerrit.libreoffice.org/c/core/+/111500 +Tested-by: Jenkins +Reviewed-by: Michael Stahl +(cherry picked from commit 5af5ea893bcb8a8eb472ac11133da10e5a604e66) + +xmlsecurity: add EqualDistinguishedNames() + +Reviewed-on: https://gerrit.libreoffice.org/c/core/+/111545 +Tested-by: Jenkins +Reviewed-by: Michael Stahl +(cherry picked from commit 1d3da3486d827dd5e7a3bf1c7a533f5aa9860e42) + +xmlsecurity: avoid exception in DigitalSignaturesDialog::getCertificate() + +Fallback to PGP if there's no X509 signing certificate because +CheckX509Data() failed prevents the dialog from popping up. + +To avoid confusing the user in this situation, the dialog should +show no certificate, which is already the case. + +Reviewed-on: https://gerrit.libreoffice.org/c/core/+/111664 +Tested-by: Jenkins +Reviewed-by: Michael Stahl +(cherry picked from commit 90b725675c2964f4a151d802d9afedd8bc2ae1a7) + +xmlsecurity: fix crash in DocumentDigitalSignatures::isAuthorTrusted() + +If the argument is null. + +This function also should use EqualDistinguishedNames(). + +Reviewed-on: https://gerrit.libreoffice.org/c/core/+/111667 +Tested-by: Jenkins +Reviewed-by: Michael Stahl +(cherry picked from commit ca98e505cd69bf95d8ddb9387cf3f8e03ae4577d) + +Change-Id: I9633a980b0c18d58dfce24fc59396a833498a77d +Reviewed-on: https://gerrit.libreoffice.org/c/core/+/111910 +Tested-by: Jenkins +Reviewed-by: Caolán McNamara +--- + include/svl/sigstruct.hxx | 32 +++- + svl/source/crypto/cryptosign.cxx | 16 +- + sw/source/core/edit/edfcol.cxx | 3 +- + xmlsecurity/inc/biginteger.hxx | 3 + + xmlsecurity/inc/xmlsignaturehelper.hxx | 12 ++ + xmlsecurity/inc/xsecctl.hxx | 14 +- + .../source/component/documentdigitalsignatures.cxx | 54 ++++--- + .../source/dialogs/digitalsignaturesdialog.cxx | 15 +- + .../source/helper/documentsignaturehelper.cxx | 63 +++++--- + .../source/helper/documentsignaturemanager.cxx | 12 ++ + xmlsecurity/source/helper/ooxmlsecexporter.cxx | 22 ++- + xmlsecurity/source/helper/ooxmlsecparser.cxx | 22 ++- + xmlsecurity/source/helper/pdfsignaturehelper.cxx | 8 +- + xmlsecurity/source/helper/xmlsignaturehelper.cxx | 161 +++++++++++++++++++++ + xmlsecurity/source/helper/xsecctl.cxx | 80 ++++++---- + xmlsecurity/source/helper/xsecparser.cxx | 144 +++++++++--------- + xmlsecurity/source/helper/xsecsign.cxx | 30 ++-- + xmlsecurity/source/helper/xsecverify.cxx | 124 +++++++++++++--- + .../xmlsec/mscrypt/x509certificate_mscryptimpl.cxx | 47 ++++++ + .../xmlsec/mscrypt/xmlsignature_mscryptimpl.cxx | 2 + + .../source/xmlsec/nss/x509certificate_nssimpl.cxx | 25 ++++ + .../source/xmlsec/nss/xmlsignature_nssimpl.cxx | 3 + + 22 files changed, 678 insertions(+), 214 deletions(-) + +diff --git a/include/svl/sigstruct.hxx b/include/svl/sigstruct.hxx +index d62ecb09634c..6d53e048d47b 100644 +--- a/include/svl/sigstruct.hxx ++++ b/include/svl/sigstruct.hxx +@@ -89,9 +89,30 @@ struct SignatureInformation + sal_Int32 nSecurityId; + css::xml::crypto::SecurityOperationStatus nStatus; + SignatureReferenceInformations vSignatureReferenceInfors; +- OUString ouX509IssuerName; +- OUString ouX509SerialNumber; +- OUString ouX509Certificate; ++ struct X509CertInfo ++ { ++ OUString X509IssuerName; ++ OUString X509SerialNumber; ++ OUString X509Certificate; ++ /// OOXML certificate SHA-256 digest, empty for ODF except when doing XAdES signature. ++ OUString CertDigest; ++ /// The certificate owner (aka subject). ++ OUString X509Subject; ++ }; ++ typedef std::vector X509Data; ++ // note: at parse time, it's unkown which one is the signing certificate; ++ // ImplVerifySignatures() figures it out and puts it at the back ++ std::vector X509Datas; ++ ++ X509CertInfo const* GetSigningCertificate() const ++ { ++ if (X509Datas.empty()) ++ { ++ return nullptr; ++ } ++ assert(!X509Datas.back().empty()); ++ return & X509Datas.back().back(); ++ } + + OUString ouGpgKeyID; + OUString ouGpgCertificate; +@@ -124,8 +145,6 @@ struct SignatureInformation + OUString ouDescription; + /// The Id attribute of the element that contains the . + OUString ouDescriptionPropertyId; +- /// OOXML certificate SHA-256 digest, empty for ODF except when doing XAdES signature. +- OUString ouCertDigest; + /// Valid and invalid signature line images + css::uno::Reference aValidSignatureImage; + css::uno::Reference aInvalidSignatureImage; +@@ -140,9 +159,6 @@ struct SignatureInformation + /// For PDF: the byte range doesn't cover the whole document. + bool bPartialDocumentSignature; + +- /// The certificate owner (aka subject). +- OUString ouSubject; +- + svl::crypto::SignatureMethodAlgorithm eAlgorithmID; + + SignatureInformation( sal_Int32 nId ) +diff --git a/svl/source/crypto/cryptosign.cxx b/svl/source/crypto/cryptosign.cxx +index 573c06ba5826..a015f00576a4 100644 +--- a/svl/source/crypto/cryptosign.cxx ++++ b/svl/source/crypto/cryptosign.cxx +@@ -2094,8 +2094,12 @@ bool Signing::Verify(const std::vector& aData, + aDerCert[i] = pCertificate->derCert.data[i]; + OUStringBuffer aBuffer; + comphelper::Base64::encode(aBuffer, aDerCert); +- rInformation.ouX509Certificate = aBuffer.makeStringAndClear(); +- rInformation.ouSubject = OUString(pCertificate->subjectName, PL_strlen(pCertificate->subjectName), RTL_TEXTENCODING_UTF8); ++ SignatureInformation::X509Data temp; ++ temp.emplace_back(); ++ temp.back().X509Certificate = aBuffer.makeStringAndClear(); ++ temp.back().X509Subject = OUString(pCertificate->subjectName, PL_strlen(pCertificate->subjectName), RTL_TEXTENCODING_UTF8); ++ rInformation.X509Datas.clear(); ++ rInformation.X509Datas.emplace_back(temp); + } + + PRTime nSigningTime; +@@ -2274,8 +2278,12 @@ bool Signing::Verify(const std::vector& aData, + aDerCert[i] = pSignerCertContext->pbCertEncoded[i]; + OUStringBuffer aBuffer; + comphelper::Base64::encode(aBuffer, aDerCert); +- rInformation.ouX509Certificate = aBuffer.makeStringAndClear(); +- rInformation.ouSubject = GetSubjectName(pSignerCertContext); ++ SignatureInformation::X509Data temp; ++ temp.emplace_back(); ++ temp.back().X509Certificate = aBuffer.makeStringAndClear(); ++ temp.back().X509Subject = GetSubjectName(pSignerCertContext); ++ rInformation.X509Datas.clear(); ++ rInformation.X509Datas.emplace_back(temp); + } + + if (bNonDetached) +diff --git a/sw/source/core/edit/edfcol.cxx b/sw/source/core/edit/edfcol.cxx +index d0154b4886ef..b2299ec42213 100644 +--- a/sw/source/core/edit/edfcol.cxx ++++ b/sw/source/core/edit/edfcol.cxx +@@ -402,7 +402,8 @@ std::pair lcl_MakeParagraphSignatureFieldText(const SignatureDes + valid = valid + && aInfo.nStatus == xml::crypto::SecurityOperationStatus_OPERATION_SUCCEEDED; + +- msg = SwResId(STR_SIGNED_BY) + ": " + aInfo.ouSubject + ", " + ++ assert(aInfo.GetSigningCertificate()); // it was valid ++ msg = SwResId(STR_SIGNED_BY) + ": " + aInfo.GetSigningCertificate()->X509Subject + ", " + + aDescr.msDate; + msg += (!aDescr.msUsage.isEmpty() ? (" (" + aDescr.msUsage + "): ") : OUString(": ")); + msg += (valid ? SwResId(STR_VALID) : SwResId(STR_INVALID)); +diff --git a/xmlsecurity/inc/biginteger.hxx b/xmlsecurity/inc/biginteger.hxx +index d07ecf45d8af..8b4d8a9143b5 100644 +--- a/xmlsecurity/inc/biginteger.hxx ++++ b/xmlsecurity/inc/biginteger.hxx +@@ -31,6 +31,9 @@ namespace xmlsecurity + { + XSECXMLSEC_DLLPUBLIC OUString bigIntegerToNumericString( const css::uno::Sequence< sal_Int8 >& serial ); + XSECXMLSEC_DLLPUBLIC css::uno::Sequence< sal_Int8 > numericStringToBigInteger ( const OUString& serialNumber ); ++ ++XSECXMLSEC_DLLPUBLIC bool EqualDistinguishedNames(OUString const& rName1, ++ OUString const& rName2); + } + + #endif +diff --git a/xmlsecurity/inc/xmlsignaturehelper.hxx b/xmlsecurity/inc/xmlsignaturehelper.hxx +index 2437686ea31b..a12309ef4d0a 100644 +--- a/xmlsecurity/inc/xmlsignaturehelper.hxx ++++ b/xmlsecurity/inc/xmlsignaturehelper.hxx +@@ -28,6 +28,9 @@ + #include "xmlsignaturehelper.hxx" + #include "xsecctl.hxx" + ++#include ++#include ++ + class DateTime; + class UriBindingHelper; + +@@ -93,6 +96,15 @@ public: + // After signing/verifying, get information about signatures + SignatureInformation GetSignatureInformation( sal_Int32 nSecurityId ) const; + SignatureInformations GetSignatureInformations() const; ++ /// ImplVerifySignature calls this to figure out which X509Data is the ++ /// signing certificate and update the internal state with the result. ++ /// @return ++ /// A sequence with the signing certificate at the back on success. ++ /// An empty sequence on failure. ++ std::vector> ++ CheckAndUpdateSignatureInformation( ++ css::uno::Reference const& xSecEnv, ++ SignatureInformation const& rInfo); + + // See XSecController for documentation + void StartMission(const css::uno::Reference& xSecurityContext); +diff --git a/xmlsecurity/inc/xsecctl.hxx b/xmlsecurity/inc/xsecctl.hxx +index ec3669128d24..ca6c169798c2 100644 +--- a/xmlsecurity/inc/xsecctl.hxx ++++ b/xmlsecurity/inc/xsecctl.hxx +@@ -263,9 +263,13 @@ private: + sal_Int32 nDigestID ); + void setReferenceCount() const; + +- void setX509IssuerName( OUString const & ouX509IssuerName ); +- void setX509SerialNumber( OUString const & ouX509SerialNumber ); +- void setX509Certificate( OUString const & ouX509Certificate ); ++ void setX509Data( ++ std::vector> & rX509IssuerSerials, ++ std::vector const& rX509Certificates); ++ void setX509CertDigest( ++ OUString const& rCertDigest, sal_Int32 const nReferenceDigestID, ++ OUString const& rX509IssuerName, OUString const& rX509SerialNumber); ++ + void setSignatureValue( OUString const & ouSignatureValue ); + void setDigestValue( sal_Int32 nDigestID, OUString const & ouDigestValue ); + void setGpgKeyID( OUString const & ouKeyID ); +@@ -274,7 +278,6 @@ private: + + void setDate(OUString const& rId, OUString const& ouDate); + void setDescription(OUString const& rId, OUString const& rDescription); +- void setCertDigest(const OUString& rCertDigest); + void setValidSignatureImage(const OUString& rValidSigImg); + void setInvalidSignatureImage(const OUString& rInvalidSigImg); + void setSignatureLineId(const OUString& rSignatureLineId); +@@ -303,6 +306,9 @@ public: + + SignatureInformation getSignatureInformation( sal_Int32 nSecurityId ) const; + SignatureInformations getSignatureInformations() const; ++ /// only verify can figure out which X509Data is the signing certificate ++ void UpdateSignatureInformation(sal_Int32 nSecurityId, ++ std::vector const& rDatas); + + static void exportSignature( + const css::uno::Reference< css::xml::sax::XDocumentHandler >& xDocumentHandler, +diff --git a/xmlsecurity/source/component/documentdigitalsignatures.cxx b/xmlsecurity/source/component/documentdigitalsignatures.cxx +index d149bf5e30b2..8f1fe7c2785d 100644 +--- a/xmlsecurity/source/component/documentdigitalsignatures.cxx ++++ b/xmlsecurity/source/component/documentdigitalsignatures.cxx +@@ -529,30 +529,36 @@ DocumentDigitalSignatures::ImplVerifySignatures( + const SignatureInformation& rInfo = aSignInfos[n]; + css::security::DocumentSignatureInformation& rSigInfo = arInfos[n]; + +- if (rInfo.ouGpgCertificate.isEmpty()) // X.509 ++ if (!rInfo.X509Datas.empty()) // X.509 + { +- if (!rInfo.ouX509Certificate.isEmpty()) +- rSigInfo.Signer = xSecEnv->createCertificateFromAscii(rInfo.ouX509Certificate); +- if (!rSigInfo.Signer.is()) +- rSigInfo.Signer = xSecEnv->getCertificate( +- rInfo.ouX509IssuerName, +- xmlsecurity::numericStringToBigInteger(rInfo.ouX509SerialNumber)); +- +- // On Windows checking the certificate path is buggy. It does name matching (issuer, subject name) +- // to find the parent certificate. It does not take into account that there can be several certificates +- // with the same subject name. +- try ++ std::vector> certs( ++ rSignatureHelper.CheckAndUpdateSignatureInformation( ++ xSecEnv, rInfo)); ++ if (certs.empty()) + { +- rSigInfo.CertificateStatus = xSecEnv->verifyCertificate( +- rSigInfo.Signer, Sequence>()); ++ rSigInfo.CertificateStatus = css::security::CertificateValidity::INVALID; + } +- catch (SecurityException&) ++ else + { +- OSL_FAIL("Verification of certificate failed"); +- rSigInfo.CertificateStatus = css::security::CertificateValidity::INVALID; ++ rSigInfo.Signer = certs.back(); ++ // get only intermediates ++ certs.pop_back(); ++ // On Windows checking the certificate path is buggy. It does name matching (issuer, subject name) ++ // to find the parent certificate. It does not take into account that there can be several certificates ++ // with the same subject name. ++ try ++ { ++ rSigInfo.CertificateStatus = xSecEnv->verifyCertificate( ++ rSigInfo.Signer, comphelper::containerToSequence(certs)); ++ } ++ catch (SecurityException&) ++ { ++ SAL_WARN("xmlsecurity.comp", "Verification of certificate failed"); ++ rSigInfo.CertificateStatus = css::security::CertificateValidity::INVALID; ++ } + } + } +- else if (xGpgSecEnv.is()) // GPG ++ else if (!rInfo.ouGpgCertificate.isEmpty() && xGpgSecEnv.is()) // GPG + { + // TODO not ideal to retrieve cert by keyID, might + // collide, or PGPKeyID format might change - can't we +@@ -638,15 +644,19 @@ void DocumentDigitalSignatures::showCertificate( + } + + sal_Bool DocumentDigitalSignatures::isAuthorTrusted( +- const Reference< css::security::XCertificate >& Author ) ++ const Reference& xAuthor) + { +- OUString sSerialNum = xmlsecurity::bigIntegerToNumericString( Author->getSerialNumber() ); ++ if (!xAuthor.is()) ++ { ++ return false; ++ } ++ OUString sSerialNum = xmlsecurity::bigIntegerToNumericString(xAuthor->getSerialNumber()); + + Sequence< SvtSecurityOptions::Certificate > aTrustedAuthors = SvtSecurityOptions().GetTrustedAuthors(); + + return std::any_of(aTrustedAuthors.begin(), aTrustedAuthors.end(), +- [&Author, &sSerialNum](const SvtSecurityOptions::Certificate& rAuthor) { +- return ( rAuthor[0] == Author->getIssuerName() ) ++ [&xAuthor, &sSerialNum](const SvtSecurityOptions::Certificate& rAuthor) { ++ return xmlsecurity::EqualDistinguishedNames(rAuthor[0], xAuthor->getIssuerName()) + && ( rAuthor[1] == sSerialNum ); + }); + } +diff --git a/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx b/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx +index ef67c7167c04..18ccaf2d2166 100644 +--- a/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx ++++ b/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx +@@ -588,7 +588,7 @@ void DigitalSignaturesDialog::ImplFillSignaturesBox() + if (!rInfo.ouGpgCertificate.isEmpty()) + aType = "OpenPGP"; + // XML based: XAdES or not. +- else if (!rInfo.ouCertDigest.isEmpty()) ++ else if (rInfo.GetSigningCertificate() && !rInfo.GetSigningCertificate()->CertDigest.isEmpty()) + aType = "XAdES"; + else + aType = "XML-DSig"; +@@ -700,8 +700,8 @@ uno::Reference DigitalSignaturesDialog::getCertificate(c + uno::Reference xCert; + + //First we try to get the certificate which is embedded in the XML Signature +- if (xSecEnv.is() && !rInfo.ouX509Certificate.isEmpty()) +- xCert = xSecEnv->createCertificateFromAscii(rInfo.ouX509Certificate); ++ if (xSecEnv.is() && rInfo.GetSigningCertificate() && !rInfo.GetSigningCertificate()->X509Certificate.isEmpty()) ++ xCert = xSecEnv->createCertificateFromAscii(rInfo.GetSigningCertificate()->X509Certificate); + else { + //There must be an embedded certificate because we use it to get the + //issuer name. We cannot use /Signature/KeyInfo/X509Data/X509IssuerName +@@ -713,9 +713,12 @@ uno::Reference DigitalSignaturesDialog::getCertificate(c + } + + //In case there is no embedded certificate we try to get it from a local store +- if (!xCert.is() && xSecEnv.is()) +- xCert = xSecEnv->getCertificate( rInfo.ouX509IssuerName, xmlsecurity::numericStringToBigInteger( rInfo.ouX509SerialNumber ) ); +- if (!xCert.is() && xGpgSecEnv.is()) ++ if (!xCert.is() && xSecEnv.is() && rInfo.GetSigningCertificate()) ++ { ++ xCert = xSecEnv->getCertificate(rInfo.GetSigningCertificate()->X509IssuerName, ++ xmlsecurity::numericStringToBigInteger(rInfo.GetSigningCertificate()->X509SerialNumber)); ++ } ++ if (!xCert.is() && xGpgSecEnv.is() && !rInfo.ouGpgKeyID.isEmpty()) + xCert = xGpgSecEnv->getCertificate( rInfo.ouGpgKeyID, xmlsecurity::numericStringToBigInteger("") ); + + SAL_WARN_IF( !xCert.is(), "xmlsecurity.dialogs", "Certificate not found and can't be created!" ); +diff --git a/xmlsecurity/source/helper/documentsignaturehelper.cxx b/xmlsecurity/source/helper/documentsignaturehelper.cxx +index 482ae6cc4126..ddff308ee52f 100644 +--- a/xmlsecurity/source/helper/documentsignaturehelper.cxx ++++ b/xmlsecurity/source/helper/documentsignaturehelper.cxx +@@ -492,6 +492,29 @@ void DocumentSignatureHelper::writeDigestMethod( + xDocumentHandler->endElement("DigestMethod"); + } + ++static void WriteXadesCert( ++ uno::Reference const& xDocumentHandler, ++ SignatureInformation::X509CertInfo const& rCertInfo) ++{ ++ xDocumentHandler->startElement("xd:Cert", uno::Reference(new SvXMLAttributeList())); ++ xDocumentHandler->startElement("xd:CertDigest", uno::Reference(new SvXMLAttributeList())); ++ DocumentSignatureHelper::writeDigestMethod(xDocumentHandler); ++ xDocumentHandler->startElement("DigestValue", uno::Reference(new SvXMLAttributeList())); ++ assert(!rCertInfo.CertDigest.isEmpty()); ++ xDocumentHandler->characters(rCertInfo.CertDigest); ++ xDocumentHandler->endElement("DigestValue"); ++ xDocumentHandler->endElement("xd:CertDigest"); ++ xDocumentHandler->startElement("xd:IssuerSerial", uno::Reference(new SvXMLAttributeList())); ++ xDocumentHandler->startElement("X509IssuerName", uno::Reference(new SvXMLAttributeList())); ++ xDocumentHandler->characters(rCertInfo.X509IssuerName); ++ xDocumentHandler->endElement("X509IssuerName"); ++ xDocumentHandler->startElement("X509SerialNumber", uno::Reference(new SvXMLAttributeList())); ++ xDocumentHandler->characters(rCertInfo.X509SerialNumber); ++ xDocumentHandler->endElement("X509SerialNumber"); ++ xDocumentHandler->endElement("xd:IssuerSerial"); ++ xDocumentHandler->endElement("xd:Cert"); ++} ++ + void DocumentSignatureHelper::writeSignedProperties( + const uno::Reference& xDocumentHandler, + const SignatureInformation& signatureInfo, +@@ -508,26 +531,26 @@ void DocumentSignatureHelper::writeSignedProperties( + xDocumentHandler->characters(sDate); + xDocumentHandler->endElement("xd:SigningTime"); + xDocumentHandler->startElement("xd:SigningCertificate", uno::Reference(new SvXMLAttributeList())); +- xDocumentHandler->startElement("xd:Cert", uno::Reference(new SvXMLAttributeList())); +- xDocumentHandler->startElement("xd:CertDigest", uno::Reference(new SvXMLAttributeList())); +- writeDigestMethod(xDocumentHandler); +- +- xDocumentHandler->startElement("DigestValue", uno::Reference(new SvXMLAttributeList())); +- // TODO: this is empty for gpg signatures currently +- //assert(!signatureInfo.ouCertDigest.isEmpty()); +- xDocumentHandler->characters(signatureInfo.ouCertDigest); +- xDocumentHandler->endElement("DigestValue"); +- +- xDocumentHandler->endElement("xd:CertDigest"); +- xDocumentHandler->startElement("xd:IssuerSerial", uno::Reference(new SvXMLAttributeList())); +- xDocumentHandler->startElement("X509IssuerName", uno::Reference(new SvXMLAttributeList())); +- xDocumentHandler->characters(signatureInfo.ouX509IssuerName); +- xDocumentHandler->endElement("X509IssuerName"); +- xDocumentHandler->startElement("X509SerialNumber", uno::Reference(new SvXMLAttributeList())); +- xDocumentHandler->characters(signatureInfo.ouX509SerialNumber); +- xDocumentHandler->endElement("X509SerialNumber"); +- xDocumentHandler->endElement("xd:IssuerSerial"); +- xDocumentHandler->endElement("xd:Cert"); ++ assert(signatureInfo.GetSigningCertificate() || !signatureInfo.ouGpgKeyID.isEmpty()); ++ if (signatureInfo.GetSigningCertificate()) ++ { ++ // how should this deal with multiple X509Data elements? ++ // for now, let's write all of the certificates ... ++ for (auto const& rData : signatureInfo.X509Datas) ++ { ++ for (auto const& it : rData) ++ { ++ WriteXadesCert(xDocumentHandler, it); ++ } ++ } ++ } ++ else ++ { ++ // for PGP, write empty mandatory X509IssuerName, X509SerialNumber ++ SignatureInformation::X509CertInfo temp; ++ temp.CertDigest = signatureInfo.ouGpgKeyID; ++ WriteXadesCert(xDocumentHandler, temp); ++ } + xDocumentHandler->endElement("xd:SigningCertificate"); + xDocumentHandler->startElement("xd:SignaturePolicyIdentifier", uno::Reference(new SvXMLAttributeList())); + xDocumentHandler->startElement("xd:SignaturePolicyImplied", uno::Reference(new SvXMLAttributeList())); +diff --git a/xmlsecurity/source/helper/documentsignaturemanager.cxx b/xmlsecurity/source/helper/documentsignaturemanager.cxx +index 79d2cdf26b61..7252c54e74ab 100644 +--- a/xmlsecurity/source/helper/documentsignaturemanager.cxx ++++ b/xmlsecurity/source/helper/documentsignaturemanager.cxx +@@ -586,6 +586,18 @@ void DocumentSignatureManager::read(bool bUseTempStream, bool bCacheLastSignatur + bCacheLastSignature); + maSignatureHelper.EndMission(); + ++ // this parses the XML independently from ImplVerifySignatures() - check ++ // certificates here too ... ++ for (auto const& it : maSignatureHelper.GetSignatureInformations()) ++ { ++ if (!it.X509Datas.empty()) ++ { ++ uno::Reference const xSecEnv( ++ getSecurityEnvironment()); ++ getSignatureHelper().CheckAndUpdateSignatureInformation(xSecEnv, it); ++ } ++ } ++ + maCurrentSignatureInformations = maSignatureHelper.GetSignatureInformations(); + } + else +diff --git a/xmlsecurity/source/helper/ooxmlsecexporter.cxx b/xmlsecurity/source/helper/ooxmlsecexporter.cxx +index fe4d0df89a5d..d2c29041338f 100644 +--- a/xmlsecurity/source/helper/ooxmlsecexporter.cxx ++++ b/xmlsecurity/source/helper/ooxmlsecexporter.cxx +@@ -200,13 +200,21 @@ void OOXMLSecExporter::Impl::writeKeyInfo() + { + m_xDocumentHandler->startElement( + "KeyInfo", uno::Reference(new SvXMLAttributeList())); +- m_xDocumentHandler->startElement( +- "X509Data", uno::Reference(new SvXMLAttributeList())); +- m_xDocumentHandler->startElement( +- "X509Certificate", uno::Reference(new SvXMLAttributeList())); +- m_xDocumentHandler->characters(m_rInformation.ouX509Certificate); +- m_xDocumentHandler->endElement("X509Certificate"); +- m_xDocumentHandler->endElement("X509Data"); ++ assert(m_rInformation.GetSigningCertificate()); ++ for (auto const& rData : m_rInformation.X509Datas) ++ { ++ m_xDocumentHandler->startElement( ++ "X509Data", uno::Reference(new SvXMLAttributeList())); ++ for (auto const& it : rData) ++ { ++ m_xDocumentHandler->startElement( ++ "X509Certificate", ++ uno::Reference(new SvXMLAttributeList())); ++ m_xDocumentHandler->characters(it.X509Certificate); ++ m_xDocumentHandler->endElement("X509Certificate"); ++ } ++ m_xDocumentHandler->endElement("X509Data"); ++ } + m_xDocumentHandler->endElement("KeyInfo"); + } + +diff --git a/xmlsecurity/source/helper/ooxmlsecparser.cxx b/xmlsecurity/source/helper/ooxmlsecparser.cxx +index a200de60c07a..a25872fc057d 100644 +--- a/xmlsecurity/source/helper/ooxmlsecparser.cxx ++++ b/xmlsecurity/source/helper/ooxmlsecparser.cxx +@@ -185,9 +185,22 @@ void SAL_CALL OOXMLSecParser::endElement(const OUString& rName) + m_pXSecController->setSignatureValue(m_aSignatureValue); + m_bInSignatureValue = false; + } ++ else if (rName == "X509Data") ++ { ++ std::vector> X509IssuerSerials; ++ std::vector X509Certificates; ++ if (!m_aX509Certificate.isEmpty()) ++ { ++ X509Certificates.emplace_back(m_aX509Certificate); ++ } ++ if (!m_aX509IssuerName.isEmpty() && !m_aX509SerialNumber.isEmpty()) ++ { ++ X509IssuerSerials.emplace_back(m_aX509IssuerName, m_aX509SerialNumber); ++ } ++ m_pXSecController->setX509Data(X509IssuerSerials, X509Certificates); ++ } + else if (rName == "X509Certificate") + { +- m_pXSecController->setX509Certificate(m_aX509Certificate); + m_bInX509Certificate = false; + } + else if (rName == "mdssi:Value") +@@ -202,17 +215,18 @@ void SAL_CALL OOXMLSecParser::endElement(const OUString& rName) + } + else if (rName == "X509IssuerName") + { +- m_pXSecController->setX509IssuerName(m_aX509IssuerName); + m_bInX509IssuerName = false; + } + else if (rName == "X509SerialNumber") + { +- m_pXSecController->setX509SerialNumber(m_aX509SerialNumber); + m_bInX509SerialNumber = false; + } ++ else if (rName == "xd:Cert") ++ { ++ m_pXSecController->setX509CertDigest(m_aCertDigest, css::xml::crypto::DigestID::SHA1, m_aX509IssuerName, m_aX509SerialNumber); ++ } + else if (rName == "xd:CertDigest") + { +- m_pXSecController->setCertDigest(m_aCertDigest); + m_bInCertDigest = false; + } + else if (rName == "Object") +diff --git a/xmlsecurity/source/helper/pdfsignaturehelper.cxx b/xmlsecurity/source/helper/pdfsignaturehelper.cxx +index b0795cb8f33f..843000a9c326 100644 +--- a/xmlsecurity/source/helper/pdfsignaturehelper.cxx ++++ b/xmlsecurity/source/helper/pdfsignaturehelper.cxx +@@ -85,8 +85,12 @@ PDFSignatureHelper::GetDocumentSignatureInformations( + security::DocumentSignatureInformation& rExternal = aRet[i]; + rExternal.SignatureIsValid + = rInternal.nStatus == xml::crypto::SecurityOperationStatus_OPERATION_SUCCEEDED; +- if (!rInternal.ouX509Certificate.isEmpty()) +- rExternal.Signer = xSecEnv->createCertificateFromAscii(rInternal.ouX509Certificate); ++ if (rInternal.GetSigningCertificate() ++ && !rInternal.GetSigningCertificate()->X509Certificate.isEmpty()) ++ { ++ rExternal.Signer = xSecEnv->createCertificateFromAscii( ++ rInternal.GetSigningCertificate()->X509Certificate); ++ } + rExternal.PartialDocumentSignature = rInternal.bPartialDocumentSignature; + + // Verify certificate. +diff --git a/xmlsecurity/source/helper/xmlsignaturehelper.cxx b/xmlsecurity/source/helper/xmlsignaturehelper.cxx +index 22c056e70da1..bcb79039e342 100644 +--- a/xmlsecurity/source/helper/xmlsignaturehelper.cxx ++++ b/xmlsecurity/source/helper/xmlsignaturehelper.cxx +@@ -21,6 +21,7 @@ + #include + #include + #include ++#include + + #include + +@@ -45,6 +46,8 @@ + #include + #include + ++#include ++ + #define NS_DOCUMENTSIGNATURES "http://openoffice.org/2004/documentsignatures" + #define NS_DOCUMENTSIGNATURES_ODF_1_2 "urn:oasis:names:tc:opendocument:xmlns:digitalsignature:1.0" + #define OOXML_SIGNATURE_ORIGIN "http://schemas.openxmlformats.org/package/2006/relationships/digital-signature/origin" +@@ -547,4 +550,162 @@ void XMLSignatureHelper::CreateAndWriteOOXMLSignature(const uno::ReferenceendDocument(); + } + ++/** check this constraint from xmldsig-core 4.5.4: ++ ++ All certificates appearing in an X509Data element MUST relate to the ++ validation key by either containing it or being part of a certification ++ chain that terminates in a certificate containing the validation key. ++ */ ++static auto CheckX509Data( ++ uno::Reference const& xSecEnv, ++ std::vector const& rX509CertInfos, ++ std::vector> & rCerts, ++ std::vector & rSorted) -> bool ++{ ++ assert(rCerts.empty()); ++ assert(rSorted.empty()); ++ if (rX509CertInfos.empty()) ++ { ++ SAL_WARN("xmlsecurity.comp", "no X509Data"); ++ return false; ++ } ++ std::vector> certs; ++ for (SignatureInformation::X509CertInfo const& it : rX509CertInfos) ++ { ++ if (!it.X509Certificate.isEmpty()) ++ { ++ certs.emplace_back(xSecEnv->createCertificateFromAscii(it.X509Certificate)); ++ } ++ else ++ { ++ certs.emplace_back(xSecEnv->getCertificate( ++ it.X509IssuerName, ++ xmlsecurity::numericStringToBigInteger(it.X509SerialNumber))); ++ } ++ if (!certs.back().is()) ++ { ++ SAL_WARN("xmlsecurity.comp", "X509Data cannot be parsed"); ++ return false; ++ } ++ } ++ ++ // first, search one whose issuer isn't in the list, or a self-signed one ++ std::optional start; ++ for (size_t i = 0; i < certs.size(); ++i) ++ { ++ for (size_t j = 0; ; ++j) ++ { ++ if (j == certs.size()) ++ { ++ if (start) ++ { ++ SAL_WARN("xmlsecurity.comp", "X509Data do not form a chain: certificate has no issuer but already have start of chain: " << certs[i]->getSubjectName()); ++ return false; ++ } ++ start = i; // issuer isn't in the list ++ break; ++ } ++ if (xmlsecurity::EqualDistinguishedNames(certs[i]->getIssuerName(), certs[j]->getSubjectName())) ++ { ++ if (i == j) // self signed ++ { ++ if (start) ++ { ++ SAL_WARN("xmlsecurity.comp", "X509Data do not form a chain: certificate is self-signed but already have start of chain: " << certs[i]->getSubjectName()); ++ return false; ++ } ++ start = i; ++ } ++ break; ++ } ++ } ++ } ++ std::vector chain; ++ if (!start) ++ { ++ // this can only be a cycle? ++ SAL_WARN("xmlsecurity.comp", "X509Data do not form a chain: cycle detected"); ++ return false; ++ } ++ chain.emplace_back(*start); ++ ++ // second, check that there is a chain, no tree or cycle... ++ for (size_t i = 0; i < certs.size(); ++i) ++ { ++ assert(chain.size() == i + 1); ++ for (size_t j = 0; j < certs.size(); ++j) ++ { ++ if (chain[i] != j) ++ { ++ if (xmlsecurity::EqualDistinguishedNames( ++ certs[chain[i]]->getSubjectName(), certs[j]->getIssuerName())) ++ { ++ if (chain.size() != i + 1) // already found issuee? ++ { ++ SAL_WARN("xmlsecurity.comp", "X509Data do not form a chain: certificate issued 2 others: " << certs[chain[i]]->getSubjectName()); ++ return false; ++ } ++ chain.emplace_back(j); ++ } ++ } ++ } ++ if (i == certs.size() - 1) ++ { // last one: must be a leaf ++ if (chain.size() != i + 1) ++ { ++ SAL_WARN("xmlsecurity.comp", "X509Data do not form a chain: certificate in cycle: " << certs[chain[i]]->getSubjectName()); ++ return false; ++ } ++ } ++ else if (chain.size() != i + 2) ++ { // not issuer of another? ++ SAL_WARN("xmlsecurity.comp", "X509Data do not form a chain: certificate issued 0 others: " << certs[chain[i]]->getSubjectName()); ++ return false; ++ } ++ } ++ ++ // success ++ assert(chain.size() == rX509CertInfos.size()); ++ for (auto const& it : chain) ++ { ++ rSorted.emplace_back(rX509CertInfos[it]); ++ rCerts.emplace_back(certs[it]); ++ } ++ return true; ++} ++ ++std::vector> ++XMLSignatureHelper::CheckAndUpdateSignatureInformation( ++ uno::Reference const& xSecEnv, ++ SignatureInformation const& rInfo) ++{ ++ // if the check fails, it's not possible to determine which X509Data ++ // contained the signing certificate - the UI cannot display something ++ // useful in this case, so prevent anything misleading by clearing the ++ // X509Datas. ++ ++ std::vector> certs; ++ std::vector datas; ++ // TODO: for now, just merge all X509Datas together for checking... ++ // (this will probably break round-trip of signature with multiple X509Data, ++ // no idea if that is a problem) ++ SignatureInformation::X509Data temp; ++ SignatureInformation::X509Data tempResult; ++ for (auto const& rData : rInfo.X509Datas) ++ { ++ for (auto const& it : rData) ++ { ++ temp.emplace_back(it); ++ } ++ } ++ if (CheckX509Data(xSecEnv, temp, certs, tempResult)) ++ { ++ datas.emplace_back(tempResult); ++ } ++ ++ // rInfo is a copy, update the original ++ mpXSecController->UpdateSignatureInformation(rInfo.nSecurityId, datas); ++ return certs; ++} ++ + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +diff --git a/xmlsecurity/source/helper/xsecctl.cxx b/xmlsecurity/source/helper/xsecctl.cxx +index e3df9a85f6da..6bd88e24f91e 100644 +--- a/xmlsecurity/source/helper/xsecctl.cxx ++++ b/xmlsecurity/source/helper/xsecctl.cxx +@@ -734,7 +734,7 @@ void XSecController::exportSignature( + xDocumentHandler->startElement( + "PGPKeyID", + css::uno::Reference< css::xml::sax::XAttributeList > (new SvXMLAttributeList())); +- xDocumentHandler->characters( signatureInfo.ouCertDigest ); ++ xDocumentHandler->characters(signatureInfo.ouGpgKeyID); + xDocumentHandler->endElement( "PGPKeyID" ); + + /* Write PGPKeyPacket element */ +@@ -758,43 +758,50 @@ void XSecController::exportSignature( + } + else + { +- /* Write X509Data element */ +- xDocumentHandler->startElement( +- "X509Data", +- css::uno::Reference< css::xml::sax::XAttributeList > (new SvXMLAttributeList())); ++ assert(signatureInfo.GetSigningCertificate()); ++ for (auto const& rData : signatureInfo.X509Datas) + { +- /* Write X509IssuerSerial element */ ++ /* Write X509Data element */ + xDocumentHandler->startElement( +- "X509IssuerSerial", ++ "X509Data", + css::uno::Reference< css::xml::sax::XAttributeList > (new SvXMLAttributeList())); + { +- /* Write X509IssuerName element */ +- xDocumentHandler->startElement( +- "X509IssuerName", +- css::uno::Reference< css::xml::sax::XAttributeList > (new SvXMLAttributeList())); +- xDocumentHandler->characters( signatureInfo.ouX509IssuerName ); +- xDocumentHandler->endElement( "X509IssuerName" ); +- +- /* Write X509SerialNumber element */ +- xDocumentHandler->startElement( +- "X509SerialNumber", +- css::uno::Reference< css::xml::sax::XAttributeList > (new SvXMLAttributeList())); +- xDocumentHandler->characters( signatureInfo.ouX509SerialNumber ); +- xDocumentHandler->endElement( "X509SerialNumber" ); +- } +- xDocumentHandler->endElement( "X509IssuerSerial" ); +- +- /* Write X509Certificate element */ +- if (!signatureInfo.ouX509Certificate.isEmpty()) +- { +- xDocumentHandler->startElement( +- "X509Certificate", +- css::uno::Reference< css::xml::sax::XAttributeList > (new SvXMLAttributeList())); +- xDocumentHandler->characters( signatureInfo.ouX509Certificate ); +- xDocumentHandler->endElement( "X509Certificate" ); ++ for (auto const& it : rData) ++ { ++ /* Write X509IssuerSerial element */ ++ xDocumentHandler->startElement( ++ "X509IssuerSerial", ++ css::uno::Reference< css::xml::sax::XAttributeList > (new SvXMLAttributeList())); ++ { ++ /* Write X509IssuerName element */ ++ xDocumentHandler->startElement( ++ "X509IssuerName", ++ css::uno::Reference< css::xml::sax::XAttributeList > (new SvXMLAttributeList())); ++ xDocumentHandler->characters(it.X509IssuerName); ++ xDocumentHandler->endElement( "X509IssuerName" ); ++ ++ /* Write X509SerialNumber element */ ++ xDocumentHandler->startElement( ++ "X509SerialNumber", ++ css::uno::Reference< css::xml::sax::XAttributeList > (new SvXMLAttributeList())); ++ xDocumentHandler->characters(it.X509SerialNumber); ++ xDocumentHandler->endElement( "X509SerialNumber" ); ++ } ++ xDocumentHandler->endElement( "X509IssuerSerial" ); ++ ++ /* Write X509Certificate element */ ++ if (!it.X509Certificate.isEmpty()) ++ { ++ xDocumentHandler->startElement( ++ "X509Certificate", ++ css::uno::Reference< css::xml::sax::XAttributeList > (new SvXMLAttributeList())); ++ xDocumentHandler->characters(it.X509Certificate); ++ xDocumentHandler->endElement( "X509Certificate" ); ++ } ++ } + } ++ xDocumentHandler->endElement( "X509Data" ); + } +- xDocumentHandler->endElement( "X509Data" ); + } + } + xDocumentHandler->endElement( "KeyInfo" ); +@@ -913,6 +920,15 @@ void XSecController::exportOOXMLSignature(const uno::Reference& + aExporter.writeSignature(); + } + ++void XSecController::UpdateSignatureInformation(sal_Int32 const nSecurityId, ++ std::vector const& rDatas) ++{ ++ SignatureInformation aInf( 0 ); ++ int const nIndex = findSignatureInfor(nSecurityId); ++ assert(nIndex != -1); // nothing should touch this between parsing and verify ++ m_vInternalSignatureInformations[nIndex].signatureInfor.X509Datas = rDatas; ++} ++ + SignatureInformation XSecController::getSignatureInformation( sal_Int32 nSecurityId ) const + { + SignatureInformation aInf( 0 ); +diff --git a/xmlsecurity/source/helper/xsecparser.cxx b/xmlsecurity/source/helper/xsecparser.cxx +index f46277f96ea1..f2e00fca99c9 100644 +--- a/xmlsecurity/source/helper/xsecparser.cxx ++++ b/xmlsecurity/source/helper/xsecparser.cxx +@@ -243,98 +243,79 @@ class XSecParser::DsX509CertificateContext + : public XSecParser::Context + { + private: +- OUString m_Value; ++ OUString & m_rValue; + + public: + DsX509CertificateContext(XSecParser & rParser, +- std::unique_ptr pOldNamespaceMap) ++ std::unique_ptr pOldNamespaceMap, ++ OUString & rValue) + : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) ++ , m_rValue(rValue) + { + } + +- virtual void EndElement() override +- { +- m_rParser.m_pXSecController->setX509Certificate(m_Value); +- } +- + virtual void Characters(OUString const& rChars) override + { +- m_Value += rChars; ++ m_rValue += rChars; + } + }; + + class XSecParser::DsX509SerialNumberContext +- : public XSecParser::ReferencedContextImpl ++ : public XSecParser::Context + { + private: +- OUString m_Value; ++ OUString & m_rValue; + + public: + DsX509SerialNumberContext(XSecParser & rParser, + std::unique_ptr pOldNamespaceMap, +- bool const isReferenced) +- : ReferencedContextImpl(rParser, std::move(pOldNamespaceMap), isReferenced) +- { +- } +- +- virtual void EndElement() override ++ OUString & rValue) ++ : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) ++ , m_rValue(rValue) + { +- if (m_isReferenced) +- { +- m_rParser.m_pXSecController->setX509SerialNumber(m_Value); +- } +- else +- { +- SAL_INFO("xmlsecurity.helper", "ignoring unsigned X509SerialNumber"); +- } + } + + virtual void Characters(OUString const& rChars) override + { +- m_Value += rChars; ++ m_rValue += rChars; + } + }; + + class XSecParser::DsX509IssuerNameContext +- : public XSecParser::ReferencedContextImpl ++ : public XSecParser::Context + { + private: +- OUString m_Value; ++ OUString & m_rValue; + + public: + DsX509IssuerNameContext(XSecParser & rParser, + std::unique_ptr pOldNamespaceMap, +- bool const isReferenced) +- : ReferencedContextImpl(rParser, std::move(pOldNamespaceMap), isReferenced) +- { +- } +- +- virtual void EndElement() override ++ OUString & rValue) ++ : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) ++ , m_rValue(rValue) + { +- if (m_isReferenced) +- { +- m_rParser.m_pXSecController->setX509IssuerName(m_Value); +- } +- else +- { +- SAL_INFO("xmlsecurity.helper", "ignoring unsigned X509IssuerName"); +- } + } + + virtual void Characters(OUString const& rChars) override + { +- m_Value += rChars; ++ m_rValue += rChars; + } + }; + + class XSecParser::DsX509IssuerSerialContext +- : public XSecParser::ReferencedContextImpl ++ : public XSecParser::Context + { ++ private: ++ OUString & m_rX509IssuerName; ++ OUString & m_rX509SerialNumber; ++ + public: + DsX509IssuerSerialContext(XSecParser & rParser, + std::unique_ptr pOldNamespaceMap, +- bool const isReferenced) +- : ReferencedContextImpl(rParser, std::move(pOldNamespaceMap), isReferenced) ++ OUString & rIssuerName, OUString & rSerialNumber) ++ : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) ++ , m_rX509IssuerName(rIssuerName) ++ , m_rX509SerialNumber(rSerialNumber) + { + } + +@@ -344,20 +325,27 @@ class XSecParser::DsX509IssuerSerialContext + { + if (nNamespace == XML_NAMESPACE_DS && rName == "X509IssuerName") + { +- return std::make_unique(m_rParser, std::move(pOldNamespaceMap), m_isReferenced); ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap), m_rX509IssuerName); + } + if (nNamespace == XML_NAMESPACE_DS && rName == "X509SerialNumber") + { +- return std::make_unique(m_rParser, std::move(pOldNamespaceMap), m_isReferenced); ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap), m_rX509SerialNumber); + } + // missing: ds:X509SKI, ds:X509SubjectName, ds:X509CRL + return XSecParser::Context::CreateChildContext(std::move(pOldNamespaceMap), nNamespace, rName); + } + }; + ++/// can't be sure what is supposed to happen here because the spec is clear as mud + class XSecParser::DsX509DataContext + : public XSecParser::Context + { ++ private: ++ // sigh... "No ordering is implied by the above constraints." ++ // so store the ball of mud in vectors and try to figure it out later. ++ std::vector> m_X509IssuerSerials; ++ std::vector m_X509Certificates; ++ + public: + DsX509DataContext(XSecParser & rParser, + std::unique_ptr pOldNamespaceMap) +@@ -365,18 +353,24 @@ class XSecParser::DsX509DataContext + { + } + ++ virtual void EndElement() override ++ { ++ m_rParser.m_pXSecController->setX509Data(m_X509IssuerSerials, m_X509Certificates); ++ } ++ + virtual std::unique_ptr CreateChildContext( + std::unique_ptr pOldNamespaceMap, + sal_uInt16 const nNamespace, OUString const& rName) override + { + if (nNamespace == XML_NAMESPACE_DS && rName == "X509IssuerSerial") + { +- // can't require KeyInfo to be signed so pass in *true* +- return std::make_unique(m_rParser, std::move(pOldNamespaceMap), true); ++ m_X509IssuerSerials.emplace_back(); ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap), m_X509IssuerSerials.back().first, m_X509IssuerSerials.back().second); + } + if (nNamespace == XML_NAMESPACE_DS && rName == "X509Certificate") + { +- return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); ++ m_X509Certificates.emplace_back(); ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap), m_X509Certificates.back()); + } + // missing: ds:X509SKI, ds:X509SubjectName, ds:X509CRL + return XSecParser::Context::CreateChildContext(std::move(pOldNamespaceMap), nNamespace, rName); +@@ -968,30 +962,20 @@ class XSecParser::LoSignatureLineContext + }; + + class XSecParser::XadesCertDigestContext +- : public XSecParser::ReferencedContextImpl ++ : public XSecParser::Context + { + private: +- OUString m_Value; +- sal_Int32 m_nReferenceDigestID = css::xml::crypto::DigestID::SHA1; ++ OUString & m_rDigestValue; ++ sal_Int32 & m_rReferenceDigestID; + + public: + XadesCertDigestContext(XSecParser & rParser, + std::unique_ptr pOldNamespaceMap, +- bool const isReferenced) +- : ReferencedContextImpl(rParser, std::move(pOldNamespaceMap), isReferenced) +- { +- } +- +- virtual void EndElement() override ++ OUString & rDigestValue, sal_Int32 & rReferenceDigestID) ++ : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) ++ , m_rDigestValue(rDigestValue) ++ , m_rReferenceDigestID(rReferenceDigestID) + { +- if (m_isReferenced) +- { +- m_rParser.m_pXSecController->setCertDigest(m_Value/* FIXME , m_nReferenceDigestID*/); +- } +- else +- { +- SAL_INFO("xmlsecurity.helper", "ignoring unsigned CertDigest"); +- } + } + + virtual std::unique_ptr CreateChildContext( +@@ -1000,11 +984,11 @@ class XSecParser::XadesCertDigestContext + { + if (nNamespace == XML_NAMESPACE_DS && rName == "DigestMethod") + { +- return std::make_unique(m_rParser, std::move(pOldNamespaceMap), m_nReferenceDigestID); ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap), m_rReferenceDigestID); + } + if (nNamespace == XML_NAMESPACE_DS && rName == "DigestValue") + { +- return std::make_unique(m_rParser, std::move(pOldNamespaceMap), m_Value); ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap), m_rDigestValue); + } + return XSecParser::Context::CreateChildContext(std::move(pOldNamespaceMap), nNamespace, rName); + } +@@ -1013,6 +997,12 @@ class XSecParser::XadesCertDigestContext + class XSecParser::XadesCertContext + : public XSecParser::ReferencedContextImpl + { ++ private: ++ sal_Int32 m_nReferenceDigestID = css::xml::crypto::DigestID::SHA1; ++ OUString m_CertDigest; ++ OUString m_X509IssuerName; ++ OUString m_X509SerialNumber; ++ + public: + XadesCertContext(XSecParser & rParser, + std::unique_ptr pOldNamespaceMap, +@@ -1021,17 +1011,29 @@ class XSecParser::XadesCertContext + { + } + ++ virtual void EndElement() override ++ { ++ if (m_isReferenced) ++ { ++ m_rParser.m_pXSecController->setX509CertDigest(m_CertDigest, m_nReferenceDigestID, m_X509IssuerName, m_X509SerialNumber); ++ } ++ else ++ { ++ SAL_INFO("xmlsecurity.helper", "ignoring unsigned xades:Cert"); ++ } ++ } ++ + virtual std::unique_ptr CreateChildContext( + std::unique_ptr pOldNamespaceMap, + sal_uInt16 const nNamespace, OUString const& rName) override + { + if (nNamespace == XML_NAMESPACE_XADES132 && rName == "CertDigest") + { +- return std::make_unique(m_rParser, std::move(pOldNamespaceMap), m_isReferenced); ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap), m_CertDigest, m_nReferenceDigestID); + } + if (nNamespace == XML_NAMESPACE_XADES132 && rName == "IssuerSerial") + { +- return std::make_unique(m_rParser, std::move(pOldNamespaceMap), m_isReferenced); ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap), m_X509IssuerName, m_X509SerialNumber); + } + return XSecParser::Context::CreateChildContext(std::move(pOldNamespaceMap), nNamespace, rName); + } +diff --git a/xmlsecurity/source/helper/xsecsign.cxx b/xmlsecurity/source/helper/xsecsign.cxx +index 1e1688767f00..fd33a320d9bd 100644 +--- a/xmlsecurity/source/helper/xsecsign.cxx ++++ b/xmlsecurity/source/helper/xsecsign.cxx +@@ -193,6 +193,7 @@ void XSecController::signAStream( sal_Int32 securityId, const OUString& uri, boo + } + } + ++// note: this is called when creating a new signature from scratch + void XSecController::setX509Certificate( + sal_Int32 nSecurityId, + const OUString& ouX509IssuerName, +@@ -206,10 +207,13 @@ void XSecController::setX509Certificate( + if ( index == -1 ) + { + InternalSignatureInformation isi(nSecurityId, nullptr); +- isi.signatureInfor.ouX509IssuerName = ouX509IssuerName; +- isi.signatureInfor.ouX509SerialNumber = ouX509SerialNumber; +- isi.signatureInfor.ouX509Certificate = ouX509Cert; +- isi.signatureInfor.ouCertDigest = ouX509CertDigest; ++ isi.signatureInfor.X509Datas.clear(); ++ isi.signatureInfor.X509Datas.emplace_back(); ++ isi.signatureInfor.X509Datas.back().emplace_back(); ++ isi.signatureInfor.X509Datas.back().back().X509IssuerName = ouX509IssuerName; ++ isi.signatureInfor.X509Datas.back().back().X509SerialNumber = ouX509SerialNumber; ++ isi.signatureInfor.X509Datas.back().back().X509Certificate = ouX509Cert; ++ isi.signatureInfor.X509Datas.back().back().CertDigest = ouX509CertDigest; + isi.signatureInfor.eAlgorithmID = eAlgorithmID; + m_vInternalSignatureInformations.push_back( isi ); + } +@@ -217,16 +221,19 @@ void XSecController::setX509Certificate( + { + SignatureInformation &si + = m_vInternalSignatureInformations[index].signatureInfor; +- si.ouX509IssuerName = ouX509IssuerName; +- si.ouX509SerialNumber = ouX509SerialNumber; +- si.ouX509Certificate = ouX509Cert; +- si.ouCertDigest = ouX509CertDigest; ++ si.X509Datas.clear(); ++ si.X509Datas.emplace_back(); ++ si.X509Datas.back().emplace_back(); ++ si.X509Datas.back().back().X509IssuerName = ouX509IssuerName; ++ si.X509Datas.back().back().X509SerialNumber = ouX509SerialNumber; ++ si.X509Datas.back().back().X509Certificate = ouX509Cert; ++ si.X509Datas.back().back().CertDigest = ouX509CertDigest; + } + } + + void XSecController::setGpgCertificate( + sal_Int32 nSecurityId, +- const OUString& ouCertDigest, ++ const OUString& ouKeyDigest, + const OUString& ouCert, + const OUString& ouOwner) + { +@@ -237,16 +244,17 @@ void XSecController::setGpgCertificate( + InternalSignatureInformation isi(nSecurityId, nullptr); + isi.signatureInfor.ouGpgCertificate = ouCert; + isi.signatureInfor.ouGpgOwner = ouOwner; +- isi.signatureInfor.ouCertDigest = ouCertDigest; ++ isi.signatureInfor.ouGpgKeyID = ouKeyDigest; + m_vInternalSignatureInformations.push_back( isi ); + } + else + { + SignatureInformation &si + = m_vInternalSignatureInformations[index].signatureInfor; ++ si.X509Datas.clear(); // it is a PGP signature now + si.ouGpgCertificate = ouCert; + si.ouGpgOwner = ouOwner; +- si.ouCertDigest = ouCertDigest; ++ si.ouGpgKeyID = ouKeyDigest; + } + } + +diff --git a/xmlsecurity/source/helper/xsecverify.cxx b/xmlsecurity/source/helper/xsecverify.cxx +index 92ebfb6c72e8..89141ed1dfd4 100644 +--- a/xmlsecurity/source/helper/xsecverify.cxx ++++ b/xmlsecurity/source/helper/xsecverify.cxx +@@ -22,6 +22,7 @@ + #include + #include "xsecparser.hxx" + #include "ooxmlsecparser.hxx" ++#include + #include + #include + #include +@@ -240,7 +241,9 @@ void XSecController::setReferenceCount() const + } + } + +-void XSecController::setX509IssuerName( OUString const & ouX509IssuerName ) ++void XSecController::setX509Data( ++ std::vector> & rX509IssuerSerials, ++ std::vector const& rX509Certificates) + { + if (m_vInternalSignatureInformations.empty()) + { +@@ -248,29 +251,52 @@ void XSecController::setX509IssuerName( OUString const & ouX509IssuerName ) + return; + } + InternalSignatureInformation &isi = m_vInternalSignatureInformations.back(); +- isi.signatureInfor.ouX509IssuerName = ouX509IssuerName; +-} +- +-void XSecController::setX509SerialNumber( OUString const & ouX509SerialNumber ) +-{ +- if (m_vInternalSignatureInformations.empty()) ++ SignatureInformation::X509Data data; ++ // due to the excessive flexibility of the spec it's possible that there ++ // is both a reference to a cert and the cert itself in one X509Data ++ for (OUString const& it : rX509Certificates) + { +- SAL_INFO("xmlsecurity.helper","XSecController::setX509SerialNumber: no signature"); +- return; ++ try ++ { ++ data.emplace_back(); ++ data.back().X509Certificate = it; ++ uno::Reference const xSecEnv(m_xSecurityContext->getSecurityEnvironment()); ++ uno::Reference const xCert(xSecEnv->createCertificateFromAscii(it)); ++ if (!xCert.is()) ++ { ++ SAL_INFO("xmlsecurity.helper", "cannot parse X509Certificate"); ++ continue; // will be handled in CheckX509Data ++ } ++ OUString const issuerName(xCert->getIssuerName()); ++ OUString const serialNumber(xmlsecurity::bigIntegerToNumericString(xCert->getSerialNumber())); ++ auto const iter = std::find_if(rX509IssuerSerials.begin(), rX509IssuerSerials.end(), ++ [&](auto const& rX509IssuerSerial) { ++ return xmlsecurity::EqualDistinguishedNames(issuerName, rX509IssuerSerial.first) ++ && serialNumber == rX509IssuerSerial.second; ++ }); ++ if (iter != rX509IssuerSerials.end()) ++ { ++ data.back().X509IssuerName = iter->first; ++ data.back().X509SerialNumber = iter->second; ++ rX509IssuerSerials.erase(iter); ++ } ++ } ++ catch (uno::Exception const&) ++ { ++ SAL_INFO("xmlsecurity.helper", "cannot parse X509Certificate"); ++ } + } +- InternalSignatureInformation &isi = m_vInternalSignatureInformations.back(); +- isi.signatureInfor.ouX509SerialNumber = ouX509SerialNumber; +-} +- +-void XSecController::setX509Certificate( OUString const & ouX509Certificate ) +-{ +- if (m_vInternalSignatureInformations.empty()) ++ // now handle any that are left... ++ for (auto const& it : rX509IssuerSerials) + { +- SAL_INFO("xmlsecurity.helper","XSecController::setX509Certificate: no signature"); +- return; ++ data.emplace_back(); ++ data.back().X509IssuerName = it.first; ++ data.back().X509SerialNumber = it.second; ++ } ++ if (!data.empty()) ++ { ++ isi.signatureInfor.X509Datas.push_back(data); + } +- InternalSignatureInformation &isi = m_vInternalSignatureInformations.back(); +- isi.signatureInfor.ouX509Certificate = ouX509Certificate; + } + + void XSecController::setSignatureValue( OUString const & ouSignatureValue ) +@@ -380,13 +406,67 @@ void XSecController::setSignatureBytes(const uno::Sequence& rBytes) + rInformation.signatureInfor.aSignatureBytes = rBytes; + } + +-void XSecController::setCertDigest(const OUString& rCertDigest) ++void XSecController::setX509CertDigest( ++ OUString const& rCertDigest, sal_Int32 const /*TODO nReferenceDigestID*/, ++ OUString const& rX509IssuerName, OUString const& rX509SerialNumber) + { + if (m_vInternalSignatureInformations.empty()) + return; + + InternalSignatureInformation& rInformation = m_vInternalSignatureInformations.back(); +- rInformation.signatureInfor.ouCertDigest = rCertDigest; ++ for (auto & rData : rInformation.signatureInfor.X509Datas) ++ { ++ for (auto & it : rData) ++ { ++ if (xmlsecurity::EqualDistinguishedNames(it.X509IssuerName, rX509IssuerName) ++ && it.X509SerialNumber == rX509SerialNumber) ++ { ++ it.CertDigest = rCertDigest; ++ return; ++ } ++ } ++ } ++ // fall-back: read the actual certificates ++ for (auto & rData : rInformation.signatureInfor.X509Datas) ++ { ++ for (auto & it : rData) ++ { ++ if (!it.X509Certificate.isEmpty()) ++ { ++ try ++ { ++ uno::Reference const xSecEnv(m_xSecurityContext->getSecurityEnvironment()); ++ uno::Reference const xCert(xSecEnv->createCertificateFromAscii(it.X509Certificate)); ++ if (!xCert.is()) ++ { ++ SAL_INFO("xmlsecurity.helper", "cannot parse X509Certificate"); ++ } ++ else if (xmlsecurity::EqualDistinguishedNames(xCert->getIssuerName(),rX509IssuerName) ++ && xmlsecurity::bigIntegerToNumericString(xCert->getSerialNumber()) == rX509SerialNumber) ++ { ++ it.CertDigest = rCertDigest; ++ // note: testInsertCertificate_PEM_DOCX requires these! ++ it.X509SerialNumber = rX509SerialNumber; ++ it.X509IssuerName = rX509IssuerName; ++ return; ++ } ++ } ++ catch (uno::Exception const&) ++ { ++ SAL_INFO("xmlsecurity.helper", "cannot parse X509Certificate"); ++ } ++ } ++ } ++ } ++ if (!rInformation.signatureInfor.ouGpgCertificate.isEmpty()) ++ { ++ SAL_INFO_IF(rCertDigest != rInformation.signatureInfor.ouGpgKeyID, ++ "xmlsecurity.helper", "PGPKeyID vs CertDigest mismatch"); ++ } ++ else ++ { ++ SAL_INFO("xmlsecurity.helper", "cannot find X509Data for CertDigest"); ++ } + } + + namespace { +diff --git a/xmlsecurity/source/xmlsec/mscrypt/x509certificate_mscryptimpl.cxx b/xmlsecurity/source/xmlsec/mscrypt/x509certificate_mscryptimpl.cxx +index 0e619b2802f8..244cd46ac564 100644 +--- a/xmlsecurity/source/xmlsec/mscrypt/x509certificate_mscryptimpl.cxx ++++ b/xmlsecurity/source/xmlsec/mscrypt/x509certificate_mscryptimpl.cxx +@@ -26,6 +26,7 @@ + #include + #include "x509certificate_mscryptimpl.hxx" + #include ++#include + #include "sanextension_mscryptimpl.hxx" + + #include "oid.hxx" +@@ -649,4 +650,50 @@ Sequence SAL_CALL X509Certificate_MSCryptImpl::getSupportedServiceName + return { OUString() }; + } + ++namespace xmlsecurity { ++ ++static bool EncodeDistinguishedName(OUString const& rName, CERT_NAME_BLOB & rBlob) ++{ ++ LPCWSTR pszError; ++ if (!CertStrToNameW(X509_ASN_ENCODING, ++ reinterpret_cast(rName.getStr()), CERT_X500_NAME_STR, ++ nullptr, nullptr, &rBlob.cbData, &pszError)) ++ { ++ SAL_INFO("xmlsecurity.xmlsec", "CertStrToNameW failed: " << WindowsErrorString(GetLastError()) << "; " << reinterpret_cast(pszError)); ++ return false; ++ } ++ rBlob.pbData = new BYTE[rBlob.cbData]; ++ if (!CertStrToNameW(X509_ASN_ENCODING, ++ reinterpret_cast(rName.getStr()), CERT_X500_NAME_STR, ++ nullptr, rBlob.pbData, &rBlob.cbData, &pszError)) ++ { ++ SAL_INFO("xmlsecurity.xmlsec", "CertStrToNameW failed: " << WindowsErrorString(GetLastError()) << "; " << reinterpret_cast(pszError)); ++ return false; ++ } ++ return true; ++} ++ ++bool EqualDistinguishedNames( ++ OUString const& rName1, OUString const& rName2) ++{ ++ CERT_NAME_BLOB blob1; ++ if (!EncodeDistinguishedName(rName1, blob1)) ++ { ++ return false; ++ } ++ CERT_NAME_BLOB blob2; ++ if (!EncodeDistinguishedName(rName2, blob2)) ++ { ++ delete[] blob1.pbData; ++ return false; ++ } ++ bool const ret(CertCompareCertificateName(X509_ASN_ENCODING, ++ &blob1, &blob2) == TRUE); ++ delete[] blob2.pbData; ++ delete[] blob1.pbData; ++ return ret; ++} ++ ++} // namespace xmlsecurity ++ + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +diff --git a/xmlsecurity/source/xmlsec/mscrypt/xmlsignature_mscryptimpl.cxx b/xmlsecurity/source/xmlsec/mscrypt/xmlsignature_mscryptimpl.cxx +index dcbad0348091..c699c950f351 100644 +--- a/xmlsecurity/source/xmlsec/mscrypt/xmlsignature_mscryptimpl.cxx ++++ b/xmlsecurity/source/xmlsec/mscrypt/xmlsignature_mscryptimpl.cxx +@@ -18,6 +18,7 @@ + */ + + #include ++#include + #include + #include + +@@ -254,6 +255,7 @@ SAL_CALL XMLSignature_MSCryptImpl::validate( + ++nReferenceGood; + } + } ++ SAL_INFO("xmlsecurity.xmlsec", "xmlSecDSigCtxVerify status " << pDsigCtx->status << ", references good " << nReferenceGood << " of " << nReferenceCount); + + if (rs == 0 && nReferenceCount == nReferenceGood) + { +diff --git a/xmlsecurity/source/xmlsec/nss/x509certificate_nssimpl.cxx b/xmlsecurity/source/xmlsec/nss/x509certificate_nssimpl.cxx +index 1a323d33f32f..d6143a81883c 100644 +--- a/xmlsecurity/source/xmlsec/nss/x509certificate_nssimpl.cxx ++++ b/xmlsecurity/source/xmlsec/nss/x509certificate_nssimpl.cxx +@@ -31,6 +31,7 @@ + #include + #include "x509certificate_nssimpl.hxx" + ++#include + #include + + #include "sanextension_nssimpl.hxx" +@@ -533,4 +534,28 @@ sal_Bool SAL_CALL X509Certificate_NssImpl::supportsService(const OUString& servi + /* XServiceInfo */ + Sequence SAL_CALL X509Certificate_NssImpl::getSupportedServiceNames() { return { OUString() }; } + ++namespace xmlsecurity { ++ ++bool EqualDistinguishedNames( ++ OUString const& rName1, OUString const& rName2) ++{ ++ CERTName *const pName1(CERT_AsciiToName(OUStringToOString(rName1, RTL_TEXTENCODING_UTF8).getStr())); ++ if (pName1 == nullptr) ++ { ++ return false; ++ } ++ CERTName *const pName2(CERT_AsciiToName(OUStringToOString(rName2, RTL_TEXTENCODING_UTF8).getStr())); ++ if (pName2 == nullptr) ++ { ++ CERT_DestroyName(pName1); ++ return false; ++ } ++ bool const ret(CERT_CompareName(pName1, pName2) == SECEqual); ++ CERT_DestroyName(pName2); ++ CERT_DestroyName(pName1); ++ return ret; ++} ++ ++} // namespace xmlsecurity ++ + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +diff --git a/xmlsecurity/source/xmlsec/nss/xmlsignature_nssimpl.cxx b/xmlsecurity/source/xmlsec/nss/xmlsignature_nssimpl.cxx +index 32e4335a5207..b41d754f7407 100644 +--- a/xmlsecurity/source/xmlsec/nss/xmlsignature_nssimpl.cxx ++++ b/xmlsecurity/source/xmlsec/nss/xmlsignature_nssimpl.cxx +@@ -26,6 +26,8 @@ + + #include "securityenvironment_nssimpl.hxx" + ++#include ++ + #include + #include + +@@ -261,6 +263,7 @@ SAL_CALL XMLSignature_NssImpl::validate( + ++nReferenceGood; + } + } ++ SAL_INFO("xmlsecurity.xmlsec", "xmlSecDSigCtxVerify status " << pDsigCtx->status << ", references good " << nReferenceGood << " of " << nReferenceCount); + + if (rs == 0 && pDsigCtx->status == xmlSecDSigStatusSucceeded && nReferenceCount == nReferenceGood) + { +-- +cgit v1.2.1 + diff --git a/debian/patches/xmlsecurity-replace-XSecParser-implementation.diff b/debian/patches/xmlsecurity-replace-XSecParser-implementation.diff new file mode 100644 index 00000000000..861c4e22637 --- /dev/null +++ b/debian/patches/xmlsecurity-replace-XSecParser-implementation.diff @@ -0,0 +1,2170 @@ +From ad5930e87e788780a255523f106deb1dde5d7b37 Mon Sep 17 00:00:00 2001 +From: Michael Stahl +Date: Fri, 12 Feb 2021 16:42:51 +0100 +Subject: xmlsecurity: replace XSecParser implementation +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Implement Namespaces in XML and follow xmldsig-core and XAdES schemas. + +Reviewed-on: https://gerrit.libreoffice.org/c/core/+/110833 +Tested-by: Jenkins +Reviewed-by: Michael Stahl +(cherry picked from commit 12b15be8f4f930a04d8056b9219ac969b42a9784) + +xmlsecurity: move XSecParser state into contexts + +Reviewed-on: https://gerrit.libreoffice.org/c/core/+/111158 +Tested-by: Jenkins +Reviewed-by: Michael Stahl +(cherry picked from commit 59df9e70ce1a7ec797b836bda7f9642912febc53) + +xmlsecurity: move XSecParser Reference state into contexts + +Reviewed-on: https://gerrit.libreoffice.org/c/core/+/111159 +Tested-by: Jenkins +Reviewed-by: Michael Stahl +(cherry picked from commit cfeb89a758b5f0ec406f0d72444e52ed2f47b85e) + +Change-Id: I03537b51bb757ecbfa63a826b38de543c70ba032 +Reviewed-on: https://gerrit.libreoffice.org/c/core/+/111907 +Tested-by: Jenkins +Reviewed-by: Caolán McNamara +--- + include/xmloff/xmlimp.hxx | 6 +- + include/xmloff/xmlnmspe.hxx | 7 + + include/xmloff/xmltoken.hxx | 13 + + xmloff/source/core/xmlimp.cxx | 26 +- + xmloff/source/core/xmltoken.cxx | 13 + + xmloff/source/token/tokens.txt | 10 + + xmlsecurity/source/helper/xsecparser.cxx | 1634 ++++++++++++++++++++++++------ + xmlsecurity/source/helper/xsecparser.hxx | 99 +- + 8 files changed, 1427 insertions(+), 381 deletions(-) + +diff --git a/include/xmloff/xmlimp.hxx b/include/xmloff/xmlimp.hxx +index 7f08609189ab..86871b7df445 100644 +--- a/include/xmloff/xmlimp.hxx ++++ b/include/xmloff/xmlimp.hxx +@@ -240,8 +240,12 @@ class XMLOFF_DLLPUBLIC SvXMLImport : public cppu::WeakImplHelper< + + static void initializeNamespaceMaps(); + void registerNamespaces(); +- std::unique_ptr processNSAttributes( ++public: ++ static std::unique_ptr processNSAttributes( ++ std::unique_ptr & rpNamespaceMap, ++ SvXMLImport *const pImport, + const css::uno::Reference< css::xml::sax::XAttributeList >& xAttrList); ++private: + void Characters(const OUString& aChars); + + css::uno::Reference< css::task::XStatusIndicator > mxStatusIndicator; +diff --git a/include/xmloff/xmlnmspe.hxx b/include/xmloff/xmlnmspe.hxx +index d45832f02d81..cabdcc7578e2 100644 +--- a/include/xmloff/xmlnmspe.hxx ++++ b/include/xmloff/xmlnmspe.hxx +@@ -69,6 +69,13 @@ constexpr sal_uInt16 XML_NAMESPACE_TCD = 34; // text conversion di + constexpr sal_uInt16 XML_NAMESPACE_DLG = 35; + constexpr sal_uInt16 XML_NAMESPACE_REPORT = 36; + constexpr sal_uInt16 XML_NAMESPACE_VERSIONS_LIST = 37; ++// OOo extension digital signatures, used in ODF 1.1 ++constexpr sal_uInt16 XML_NAMESPACE_DSIG_OOO = 38; ++// ODF 1.2 digital signature namespaces ++constexpr sal_uInt16 XML_NAMESPACE_DSIG = 39; ++constexpr sal_uInt16 XML_NAMESPACE_DS = 40; ++constexpr sal_uInt16 XML_NAMESPACE_XADES132 = 41; ++constexpr sal_uInt16 XML_NAMESPACE_XADES141 = 42; + + // namespaces for ODF extended formats + constexpr sal_uInt16 XML_NAMESPACE_EXT_BASE = 50; +diff --git a/include/xmloff/xmltoken.hxx b/include/xmloff/xmltoken.hxx +index 49178ebdc996..b6956245ed17 100644 +--- a/include/xmloff/xmltoken.hxx ++++ b/include/xmloff/xmltoken.hxx +@@ -135,6 +135,19 @@ namespace xmloff::token { + XML_NP_GRDDL, + XML_N_GRDDL, + ++ // OOo extension digital signatures, used in ODF 1.1 ++ XML_NP_DSIG_OOO, ++ XML_N_DSIG_OOO, ++ // ODF 1.2 digital signatures ++ XML_NP_DSIG, ++ XML_N_DSIG, ++ XML_NP_DS, ++ XML_N_DS, ++ XML_NP_XADES132, ++ XML_N_XADES132, ++ XML_NP_XADES141, ++ XML_N_XADES141, ++ + // ODF Enhanced namespaces + XML_NP_OFFICE_EXT, + XML_N_OFFICE_EXT, +diff --git a/xmloff/source/core/xmlimp.cxx b/xmloff/source/core/xmlimp.cxx +index 0c9e9d06cfd4..18429cc4860f 100644 +--- a/xmloff/source/core/xmlimp.cxx ++++ b/xmloff/source/core/xmlimp.cxx +@@ -665,6 +665,8 @@ void SAL_CALL SvXMLImport::endDocument() + } + + std::unique_ptr SvXMLImport::processNSAttributes( ++ std::unique_ptr & rpNamespaceMap, ++ SvXMLImport *const pImport, // TODO??? + const uno::Reference< xml::sax::XAttributeList >& xAttrList) + { + std::unique_ptr pRewindMap; +@@ -672,12 +674,13 @@ std::unique_ptr SvXMLImport::processNSAttributes( + for( sal_Int16 i=0; i < nAttrCount; i++ ) + { + const OUString& rAttrName = xAttrList->getNameByIndex( i ); +- if ( rAttrName == "office:version" ) ++ if (pImport && rAttrName == "office:version") + { +- mpImpl->aODFVersion = xAttrList->getValueByIndex( i ); ++ pImport->mpImpl->aODFVersion = xAttrList->getValueByIndex( i ); + + // the ODF version in content.xml and manifest.xml must be the same starting from ODF1.2 +- if ( mpImpl->mStreamName == "content.xml" && !IsODFVersionConsistent( mpImpl->aODFVersion ) ) ++ if (pImport->mpImpl->mStreamName == "content.xml" ++ && !pImport->IsODFVersionConsistent(pImport->mpImpl->aODFVersion)) + { + throw xml::sax::SAXException("Inconsistent ODF versions in content.xml and manifest.xml!", + uno::Reference< uno::XInterface >(), +@@ -691,8 +694,8 @@ std::unique_ptr SvXMLImport::processNSAttributes( + { + if( !pRewindMap ) + { +- pRewindMap = std::move(mpNamespaceMap); +- mpNamespaceMap.reset(new SvXMLNamespaceMap(*pRewindMap)); ++ pRewindMap = std::move(rpNamespaceMap); ++ rpNamespaceMap.reset(new SvXMLNamespaceMap(*pRewindMap)); + } + const OUString& rAttrValue = xAttrList->getValueByIndex( i ); + +@@ -700,18 +703,18 @@ std::unique_ptr SvXMLImport::processNSAttributes( + ? OUString() + : rAttrName.copy( 6 ) ); + // Add namespace, but only if it is known. +- sal_uInt16 nKey = mpNamespaceMap->AddIfKnown( aPrefix, rAttrValue ); ++ sal_uInt16 nKey = rpNamespaceMap->AddIfKnown( aPrefix, rAttrValue ); + // If namespace is unknown, try to match a name with similar + // TC Id and version + if( XML_NAMESPACE_UNKNOWN == nKey ) + { + OUString aTestName( rAttrValue ); + if( SvXMLNamespaceMap::NormalizeURI( aTestName ) ) +- nKey = mpNamespaceMap->AddIfKnown( aPrefix, aTestName ); ++ nKey = rpNamespaceMap->AddIfKnown( aPrefix, aTestName ); + } + // If that namespace is not known, too, add it as unknown + if( XML_NAMESPACE_UNKNOWN == nKey ) +- mpNamespaceMap->Add( aPrefix, rAttrValue ); ++ rpNamespaceMap->Add( aPrefix, rAttrValue ); + + } + } +@@ -724,7 +727,8 @@ void SAL_CALL SvXMLImport::startElement( const OUString& rName, + // SAL_INFO("svg", "startElement " << rName); + // Process namespace attributes. This must happen before creating the + // context, because namespace declaration apply to the element name itself. +- std::unique_ptr pRewindMap(processNSAttributes(xAttrList)); ++ std::unique_ptr pRewindMap( ++ processNSAttributes(mpNamespaceMap, this, xAttrList)); + + // Get element's namespace and local name. + OUString aLocalName; +@@ -898,7 +902,7 @@ void SAL_CALL SvXMLImport::startFastElement (sal_Int32 Element, + + maNamespaceHandler->addNSDeclAttributes( maNamespaceAttrList ); + std::unique_ptr pRewindMap( +- processNSAttributes( maNamespaceAttrList.get() )); ++ processNSAttributes(mpNamespaceMap, this, maNamespaceAttrList.get())); + assert( dynamic_cast( xContext.get() ) != nullptr ); + SvXMLImportContext *pContext = static_cast( xContext.get() ); + if (pRewindMap) +@@ -2251,7 +2255,7 @@ void SAL_CALL SvXMLLegacyToFastDocHandler::endDocument() + void SAL_CALL SvXMLLegacyToFastDocHandler::startElement( const OUString& rName, + const uno::Reference< xml::sax::XAttributeList >& xAttrList ) + { +- mrImport->processNSAttributes(xAttrList); ++ SvXMLImport::processNSAttributes(mrImport->mpNamespaceMap, mrImport.get(), xAttrList); + OUString aLocalName; + sal_uInt16 nPrefix = mrImport->mpNamespaceMap->GetKeyByAttrName( rName, &aLocalName ); + Sequence< sal_Int8 > aLocalNameSeq( reinterpret_cast( +diff --git a/xmloff/source/core/xmltoken.cxx b/xmloff/source/core/xmltoken.cxx +index 8d9a70f5e082..91c014f5756f 100644 +--- a/xmloff/source/core/xmltoken.cxx ++++ b/xmloff/source/core/xmltoken.cxx +@@ -144,6 +144,19 @@ namespace xmloff::token { + TOKEN( "grddl", XML_NP_GRDDL ), + TOKEN( "http://www.w3.org/2003/g/data-view#", XML_N_GRDDL ), + ++ // OOo extension digital signatures, used in ODF 1.1 ++ TOKEN( "dsigooo", XML_NP_DSIG_OOO ), ++ TOKEN( "http://openoffice.org/2004/documentsignatures", XML_N_DSIG_OOO ), ++ // ODF 1.2 digital signature namespaces ++ TOKEN( "dsig", XML_NP_DSIG ), ++ TOKEN( "urn:oasis:names:tc:opendocument:xmlns:digitalsignature:1.0", XML_N_DSIG ), ++ TOKEN( "ds", XML_NP_DS ), ++ TOKEN( "http://www.w3.org/2000/09/xmldsig#", XML_N_DS ), ++ TOKEN( "xades132", XML_NP_XADES132 ), ++ TOKEN( "http://uri.etsi.org/01903/v1.3.2#", XML_N_XADES132 ), ++ TOKEN( "xades141", XML_NP_XADES141 ), ++ TOKEN( "http://uri.etsi.org/01903/v1.4.1#", XML_N_XADES141 ), ++ + // ODF Enhanced namespaces + TOKEN( "officeooo", XML_NP_OFFICE_EXT ), + TOKEN( "http://openoffice.org/2009/office", XML_N_OFFICE_EXT ), +diff --git a/xmloff/source/token/tokens.txt b/xmloff/source/token/tokens.txt +index 34b9af91e03c..495e519ffb2d 100644 +--- a/xmloff/source/token/tokens.txt ++++ b/xmloff/source/token/tokens.txt +@@ -72,6 +72,16 @@ xhtml + N_XHTML_DUMMY + grddl + N_GRDDL_DUMMY ++dsigooo ++N_DSIG_OOO_DUMMY ++dsig ++N_DSIG_DUMMY ++ds ++N_DS_DUMMY ++xades132 ++N_XADES132_DUMMY ++xades141 ++N_XADES141_DUMMY + officeooo + N_OFFICE_EXT_DUMMY + formx +diff --git a/xmlsecurity/source/helper/xsecparser.cxx b/xmlsecurity/source/helper/xsecparser.cxx +index 9f2bbe074a1b..0aecb1854f8c 100644 +--- a/xmlsecurity/source/helper/xsecparser.cxx ++++ b/xmlsecurity/source/helper/xsecparser.cxx +@@ -21,476 +21,1468 @@ + #include "xsecparser.hxx" + #include + #include ++ ++#include ++#include ++ + #include + #include + #include + ++class XSecParser::Context ++{ ++ protected: ++ friend class XSecParser; ++ XSecParser & m_rParser; ++ private: ++ std::unique_ptr m_pOldNamespaceMap; + +-XSecParser::XSecParser(XMLSignatureHelper& rXMLSignatureHelper, +- XSecController* pXSecController) +- : m_bInX509IssuerName(false) +- , m_bInX509SerialNumber(false) +- , m_bInX509Certificate(false) +- , m_bInGpgCertificate(false) +- , m_bInGpgKeyID(false) +- , m_bInGpgOwner(false) +- , m_bInCertDigest(false) +- , m_bInEncapsulatedX509Certificate(false) +- , m_bInSigningTime(false) +- , m_bInDigestValue(false) +- , m_bInSignatureValue(false) +- , m_bInDate(false) +- , m_bInDescription(false) +- , m_bInSignatureLineId(false) +- , m_bInSignatureLineValidImage(false) +- , m_bInSignatureLineInvalidImage(false) +- , m_pXSecController(pXSecController) +- , m_bReferenceUnresolved(false) +- , m_nReferenceDigestID(css::xml::crypto::DigestID::SHA1) +- , m_rXMLSignatureHelper(rXMLSignatureHelper) ++ public: ++ Context(XSecParser & rParser, ++ std::unique_ptr pOldNamespaceMap) ++ : m_rParser(rParser) ++ , m_pOldNamespaceMap(std::move(pOldNamespaceMap)) ++ { ++ } ++ ++ virtual ~Context() = default; ++ ++ virtual void StartElement( ++ css::uno::Reference const& /*xAttrs*/) ++ { ++ } ++ ++ virtual void EndElement() ++ { ++ } ++ ++ virtual std::unique_ptr CreateChildContext( ++ std::unique_ptr pOldNamespaceMap, ++ sal_uInt16 const /*nNamespace*/, OUString const& /*rName*/); ++ ++ virtual void Characters(OUString const& /*rChars*/) ++ { ++ } ++}; ++ ++// it's possible that an unsupported element has an Id attribute and a ++// ds:Reference digesting it - probably this means XSecController needs to know ++// about it. (For known elements, the Id attribute is only processed according ++// to the schema.) ++class XSecParser::UnknownContext ++ : public XSecParser::Context + { ++ public: ++ UnknownContext(XSecParser & rParser, ++ std::unique_ptr pOldNamespaceMap) ++ : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) ++ { ++ } ++ ++ virtual void StartElement( ++ css::uno::Reference const& xAttrs) override ++ { ++ m_rParser.HandleIdAttr(xAttrs); ++ } ++}; ++ ++auto XSecParser::Context::CreateChildContext( ++ std::unique_ptr pOldNamespaceMap, ++ sal_uInt16 const /*nNamespace*/, OUString const& /*rName*/) ++-> std::unique_ptr ++{ ++ // default: create new base context ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); + } + +-OUString XSecParser::getIdAttr(const css::uno::Reference< css::xml::sax::XAttributeList >& xAttribs ) ++class XSecParser::LoPGPOwnerContext ++ : public XSecParser::Context + { +- OUString ouIdAttr = xAttribs->getValueByName("id"); ++ private: ++ OUString m_Value; + +- if (ouIdAttr.isEmpty()) +- { +- ouIdAttr = xAttribs->getValueByName("Id"); +- } ++ public: ++ LoPGPOwnerContext(XSecParser & rParser, ++ std::unique_ptr pOldNamespaceMap) ++ : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) ++ { ++ } + +- return ouIdAttr; +-} ++ virtual void EndElement() override ++ { ++ m_rParser.m_pXSecController->setGpgOwner(m_Value); ++ } + +-/* +- * XDocumentHandler +- */ +-void SAL_CALL XSecParser::startDocument( ) ++ virtual void Characters(OUString const& rChars) override ++ { ++ m_Value += rChars; ++ } ++}; ++ ++class XSecParser::DsPGPKeyPacketContext ++ : public XSecParser::Context + { +- m_bInX509IssuerName = false; +- m_bInX509SerialNumber = false; +- m_bInX509Certificate = false; +- m_bInGpgCertificate = false; +- m_bInGpgKeyID = false; +- m_bInGpgOwner = false; +- m_bInSignatureValue = false; +- m_bInDigestValue = false; +- m_bInDate = false; +- m_bInDescription = false; ++ private: ++ OUString m_Value; + +- if (m_xNextHandler.is()) +- { +- m_xNextHandler->startDocument(); +- } +-} ++ public: ++ DsPGPKeyPacketContext(XSecParser & rParser, ++ std::unique_ptr pOldNamespaceMap) ++ : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) ++ { ++ } + +-void SAL_CALL XSecParser::endDocument( ) ++ virtual void EndElement() override ++ { ++ m_rParser.m_pXSecController->setGpgCertificate(m_Value); ++ } ++ ++ virtual void Characters(OUString const& rChars) override ++ { ++ m_Value += rChars; ++ } ++}; ++ ++class XSecParser::DsPGPKeyIDContext ++ : public XSecParser::Context + { +- if (m_xNextHandler.is()) +- { +- m_xNextHandler->endDocument(); +- } +-} ++ private: ++ OUString m_Value; + +-void SAL_CALL XSecParser::startElement( +- const OUString& aName, +- const css::uno::Reference< css::xml::sax::XAttributeList >& xAttribs ) ++ public: ++ DsPGPKeyIDContext(XSecParser & rParser, ++ std::unique_ptr pOldNamespaceMap) ++ : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) ++ { ++ } ++ ++ virtual void EndElement() override ++ { ++ m_rParser.m_pXSecController->setGpgKeyID(m_Value); ++ } ++ ++ virtual void Characters(OUString const& rChars) override ++ { ++ m_Value += rChars; ++ } ++}; ++ ++class XSecParser::DsPGPDataContext ++ : public XSecParser::Context + { +- try +- { +- OUString ouIdAttr = getIdAttr(xAttribs); +- if (!ouIdAttr.isEmpty()) ++ public: ++ DsPGPDataContext(XSecParser & rParser, ++ std::unique_ptr pOldNamespaceMap) ++ : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) ++ { ++ } ++ ++ virtual void StartElement( ++ css::uno::Reference const& /*xAttrs*/) override ++ { ++ m_rParser.m_pXSecController->switchGpgSignature(); ++ } ++ ++ virtual std::unique_ptr CreateChildContext( ++ std::unique_ptr pOldNamespaceMap, ++ sal_uInt16 const nNamespace, OUString const& rName) override ++ { ++ if (nNamespace == XML_NAMESPACE_DS && rName == "PGPKeyID") ++ { ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); ++ } ++ if (nNamespace == XML_NAMESPACE_DS && rName == "PGPKeyPacket") ++ { ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); ++ } ++ if (nNamespace == XML_NAMESPACE_LO_EXT && rName == "PGPOwner") ++ { ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); ++ } ++ return XSecParser::Context::CreateChildContext(std::move(pOldNamespaceMap), nNamespace, rName); ++ } ++}; ++ ++class XSecParser::DsX509CertificateContext ++ : public XSecParser::Context ++{ ++ private: ++ OUString m_Value; ++ ++ public: ++ DsX509CertificateContext(XSecParser & rParser, ++ std::unique_ptr pOldNamespaceMap) ++ : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) ++ { ++ } ++ ++ virtual void EndElement() override ++ { ++ m_rParser.m_pXSecController->setX509Certificate(m_Value); ++ } ++ ++ virtual void Characters(OUString const& rChars) override ++ { ++ m_Value += rChars; ++ } ++}; ++ ++class XSecParser::DsX509SerialNumberContext ++ : public XSecParser::Context ++{ ++ private: ++ OUString m_Value; ++ ++ public: ++ DsX509SerialNumberContext(XSecParser & rParser, ++ std::unique_ptr pOldNamespaceMap) ++ : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) ++ { ++ } ++ ++ virtual void EndElement() override ++ { ++ m_rParser.m_pXSecController->setX509SerialNumber(m_Value); ++ } ++ ++ virtual void Characters(OUString const& rChars) override ++ { ++ m_Value += rChars; ++ } ++}; ++ ++class XSecParser::DsX509IssuerNameContext ++ : public XSecParser::Context ++{ ++ private: ++ OUString m_Value; ++ ++ public: ++ DsX509IssuerNameContext(XSecParser & rParser, ++ std::unique_ptr pOldNamespaceMap) ++ : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) ++ { ++ } ++ ++ virtual void EndElement() override ++ { ++ m_rParser.m_pXSecController->setX509IssuerName(m_Value); ++ } ++ ++ virtual void Characters(OUString const& rChars) override ++ { ++ m_Value += rChars; ++ } ++}; ++ ++class XSecParser::DsX509IssuerSerialContext ++ : public XSecParser::Context ++{ ++ public: ++ DsX509IssuerSerialContext(XSecParser & rParser, ++ std::unique_ptr pOldNamespaceMap) ++ : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) ++ { ++ } ++ ++ virtual std::unique_ptr CreateChildContext( ++ std::unique_ptr pOldNamespaceMap, ++ sal_uInt16 const nNamespace, OUString const& rName) override ++ { ++ if (nNamespace == XML_NAMESPACE_DS && rName == "X509IssuerName") ++ { ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); ++ } ++ if (nNamespace == XML_NAMESPACE_DS && rName == "X509SerialNumber") ++ { ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); ++ } ++ // missing: ds:X509SKI, ds:X509SubjectName, ds:X509CRL ++ return XSecParser::Context::CreateChildContext(std::move(pOldNamespaceMap), nNamespace, rName); ++ } ++}; ++ ++class XSecParser::DsX509DataContext ++ : public XSecParser::Context ++{ ++ public: ++ DsX509DataContext(XSecParser & rParser, ++ std::unique_ptr pOldNamespaceMap) ++ : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) ++ { ++ } ++ ++ virtual std::unique_ptr CreateChildContext( ++ std::unique_ptr pOldNamespaceMap, ++ sal_uInt16 const nNamespace, OUString const& rName) override ++ { ++ if (nNamespace == XML_NAMESPACE_DS && rName == "X509IssuerSerial") ++ { ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); ++ } ++ if (nNamespace == XML_NAMESPACE_DS && rName == "X509Certificate") ++ { ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); ++ } ++ // missing: ds:X509SKI, ds:X509SubjectName, ds:X509CRL ++ return XSecParser::Context::CreateChildContext(std::move(pOldNamespaceMap), nNamespace, rName); ++ } ++}; ++ ++class XSecParser::DsKeyInfoContext ++ : public XSecParser::Context ++{ ++ public: ++ DsKeyInfoContext(XSecParser & rParser, ++ std::unique_ptr pOldNamespaceMap) ++ : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) ++ { ++ } ++ ++ virtual void StartElement( ++ css::uno::Reference const& xAttrs) override ++ { ++ m_rParser.HandleIdAttr(xAttrs); ++ } ++ ++ virtual std::unique_ptr CreateChildContext( ++ std::unique_ptr pOldNamespaceMap, ++ sal_uInt16 const nNamespace, OUString const& rName) override ++ { ++ if (nNamespace == XML_NAMESPACE_DS && rName == "X509Data") ++ { ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); ++ } ++ if (nNamespace == XML_NAMESPACE_DS && rName == "PGPData") ++ { ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); ++ } ++ // missing: ds:KeyName, ds:KeyValue, ds:RetrievalMethod, ds:SPKIData, ds:MgmtData ++ // (old code would read ds:Transform inside ds:RetrievalMethod but ++ // presumably that was a bug) ++ return XSecParser::Context::CreateChildContext(std::move(pOldNamespaceMap), nNamespace, rName); ++ } ++ ++}; ++ ++class XSecParser::DsSignatureValueContext ++ : public XSecParser::Context ++{ ++ private: ++ OUString m_Value; ++ ++ public: ++ DsSignatureValueContext(XSecParser & rParser, ++ std::unique_ptr pOldNamespaceMap) ++ : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) ++ { ++ } ++ ++ virtual void StartElement( ++ css::uno::Reference const& xAttrs) override ++ { ++ m_rParser.HandleIdAttr(xAttrs); ++ } ++ ++ virtual void EndElement() override ++ { ++ m_rParser.m_pXSecController->setSignatureValue(m_Value); ++ } ++ ++ virtual void Characters(OUString const& rChars) override ++ { ++ m_Value += rChars; ++ } ++}; ++ ++class XSecParser::DsDigestValueContext ++ : public XSecParser::Context ++{ ++ private: ++ OUString & m_rValue; ++ ++ public: ++ DsDigestValueContext(XSecParser & rParser, ++ std::unique_ptr pOldNamespaceMap, ++ OUString & rValue) ++ : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) ++ , m_rValue(rValue) ++ { ++ } ++ ++ virtual void StartElement( ++ css::uno::Reference const& /*xAttrs*/) override ++ { ++ m_rValue.clear(); ++ } ++ ++ virtual void Characters(OUString const& rChars) override ++ { ++ m_rValue += rChars; ++ } ++}; ++ ++class XSecParser::DsDigestMethodContext ++ : public XSecParser::Context ++{ ++ private: ++ sal_Int32 & m_rReferenceDigestID; ++ ++ public: ++ DsDigestMethodContext(XSecParser & rParser, ++ std::unique_ptr pOldNamespaceMap, ++ sal_Int32 & rReferenceDigestID) ++ : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) ++ , m_rReferenceDigestID(rReferenceDigestID) ++ { ++ } ++ ++ virtual void StartElement( ++ css::uno::Reference const& xAttrs) override ++ { ++ OUString ouAlgorithm = xAttrs->getValueByName("Algorithm"); ++ ++ SAL_WARN_IF( ouAlgorithm.isEmpty(), "xmlsecurity.helper", "no Algorithm in Reference" ); ++ if (!ouAlgorithm.isEmpty()) ++ { ++ SAL_WARN_IF( ouAlgorithm != ALGO_XMLDSIGSHA1 ++ && ouAlgorithm != ALGO_XMLDSIGSHA256 ++ && ouAlgorithm != ALGO_XMLDSIGSHA512, ++ "xmlsecurity.helper", "Algorithm neither SHA1, SHA256 nor SHA512"); ++ if (ouAlgorithm == ALGO_XMLDSIGSHA1) ++ m_rReferenceDigestID = css::xml::crypto::DigestID::SHA1; ++ else if (ouAlgorithm == ALGO_XMLDSIGSHA256) ++ m_rReferenceDigestID = css::xml::crypto::DigestID::SHA256; ++ else if (ouAlgorithm == ALGO_XMLDSIGSHA512) ++ m_rReferenceDigestID = css::xml::crypto::DigestID::SHA512; ++ else ++ m_rReferenceDigestID = 0; ++ } ++ } ++}; ++ ++class XSecParser::DsTransformContext ++ : public XSecParser::Context ++{ ++ private: ++ bool & m_rIsC14N; ++ ++ public: ++ DsTransformContext(XSecParser & rParser, ++ std::unique_ptr pOldNamespaceMap, ++ bool & rIsC14N) ++ : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) ++ , m_rIsC14N(rIsC14N) ++ { ++ } ++ ++ virtual void StartElement( ++ css::uno::Reference const& xAttrs) override ++ { ++ OUString ouAlgorithm = xAttrs->getValueByName("Algorithm"); ++ ++ if (ouAlgorithm == ALGO_C14N) ++ /* ++ * a xml stream ++ */ ++ { ++ m_rIsC14N = true; ++ } ++ } ++}; ++ ++class XSecParser::DsTransformsContext ++ : public XSecParser::Context ++{ ++ private: ++ bool & m_rIsC14N; ++ ++ public: ++ DsTransformsContext(XSecParser & rParser, ++ std::unique_ptr pOldNamespaceMap, ++ bool & rIsC14N) ++ : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) ++ , m_rIsC14N(rIsC14N) ++ { ++ } ++ ++ virtual std::unique_ptr CreateChildContext( ++ std::unique_ptr pOldNamespaceMap, ++ sal_uInt16 const nNamespace, OUString const& rName) override ++ { ++ if (nNamespace == XML_NAMESPACE_DS && rName == "Transform") ++ { ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap), m_rIsC14N); ++ } ++ return XSecParser::Context::CreateChildContext(std::move(pOldNamespaceMap), nNamespace, rName); ++ } ++}; ++ ++class XSecParser::DsReferenceContext ++ : public XSecParser::Context ++{ ++ private: ++ OUString m_URI; ++ OUString m_Type; ++ OUString m_DigestValue; ++ bool m_IsC14N = false; ++ // Relevant for ODF. The digest algorithm selected by the DigestMethod ++ // element's Algorithm attribute. @see css::xml::crypto::DigestID. ++ sal_Int32 m_nReferenceDigestID = css::xml::crypto::DigestID::SHA1; ++ ++ public: ++ DsReferenceContext(XSecParser & rParser, ++ std::unique_ptr pOldNamespaceMap) ++ : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) ++ { ++ } ++ ++ virtual void StartElement( ++ css::uno::Reference const& xAttrs) override ++ { ++ m_rParser.HandleIdAttr(xAttrs); ++ ++ m_URI = xAttrs->getValueByName("URI"); ++ SAL_WARN_IF(m_URI.isEmpty(), "xmlsecurity.helper", "URI is empty"); ++ // Remember the type of this reference. ++ m_Type = xAttrs->getValueByName("Type"); ++ } ++ ++ virtual void EndElement() override ++ { ++ if (m_URI.startsWith("#")) ++ { ++ /* ++ * remove the first character '#' from the attribute value ++ */ ++ m_rParser.m_pXSecController->addReference(m_URI.copy(1), m_nReferenceDigestID, m_Type); ++ } ++ else ++ { ++ if (m_IsC14N) // this is determined by nested ds:Transform ++ { ++ m_rParser.m_pXSecController->addStreamReference(m_URI, false, m_nReferenceDigestID); ++ } ++ else ++ /* ++ * it must be an octet stream ++ */ ++ { ++ m_rParser.m_pXSecController->addStreamReference(m_URI, true, m_nReferenceDigestID); ++ } ++ } ++ ++ m_rParser.m_pXSecController->setDigestValue(m_nReferenceDigestID, m_DigestValue); ++ } ++ ++ virtual std::unique_ptr CreateChildContext( ++ std::unique_ptr pOldNamespaceMap, ++ sal_uInt16 const nNamespace, OUString const& rName) override ++ { ++ if (nNamespace == XML_NAMESPACE_DS && rName == "Transforms") ++ { ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap), m_IsC14N); ++ } ++ if (nNamespace == XML_NAMESPACE_DS && rName == "DigestMethod") ++ { ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap), m_nReferenceDigestID); ++ } ++ if (nNamespace == XML_NAMESPACE_DS && rName == "DigestValue") ++ { ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap), m_DigestValue); ++ } ++ return XSecParser::Context::CreateChildContext(std::move(pOldNamespaceMap), nNamespace, rName); ++ } ++}; ++ ++class XSecParser::DsSignatureMethodContext ++ : public XSecParser::Context ++{ ++ public: ++ DsSignatureMethodContext(XSecParser & rParser, ++ std::unique_ptr pOldNamespaceMap) ++ : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) ++ { ++ } ++ ++ virtual void StartElement( ++ css::uno::Reference const& xAttrs) override ++ { ++ OUString ouAlgorithm = xAttrs->getValueByName("Algorithm"); ++ if (ouAlgorithm == ALGO_ECDSASHA1 || ouAlgorithm == ALGO_ECDSASHA256 ++ || ouAlgorithm == ALGO_ECDSASHA512) ++ { ++ m_rParser.m_pXSecController->setSignatureMethod(svl::crypto::SignatureMethodAlgorithm::ECDSA); ++ } ++ } ++}; ++ ++class XSecParser::DsSignedInfoContext ++ : public XSecParser::Context ++{ ++ public: ++ DsSignedInfoContext(XSecParser & rParser, ++ std::unique_ptr pOldNamespaceMap) ++ : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) ++ { ++ } ++ ++ virtual void StartElement( ++ css::uno::Reference const& xAttrs) override ++ { ++ m_rParser.HandleIdAttr(xAttrs); ++ } ++ ++ virtual void EndElement() override ++ { ++ m_rParser.m_pXSecController->setReferenceCount(); ++ } ++ ++ virtual std::unique_ptr CreateChildContext( ++ std::unique_ptr pOldNamespaceMap, ++ sal_uInt16 const nNamespace, OUString const& rName) override ++ { ++ if (nNamespace == XML_NAMESPACE_DS && rName == "SignatureMethod") ++ { ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); ++ } ++ if (nNamespace == XML_NAMESPACE_DS && rName == "Reference") ++ { ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); ++ } ++ // missing: ds:CanonicalizationMethod ++ return XSecParser::Context::CreateChildContext(std::move(pOldNamespaceMap), nNamespace, rName); ++ } ++}; ++ ++class XSecParser::XadesEncapsulatedX509CertificateContext ++ : public XSecParser::Context ++{ ++ private: ++ OUString m_Value; ++ ++ public: ++ XadesEncapsulatedX509CertificateContext(XSecParser & rParser, ++ std::unique_ptr pOldNamespaceMap) ++ : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) ++ { ++ } ++ ++ virtual void StartElement( ++ css::uno::Reference const& xAttrs) override ++ { ++ m_rParser.HandleIdAttr(xAttrs); ++ } ++ ++ virtual void EndElement() override ++ { ++ m_rParser.m_pXSecController->addEncapsulatedX509Certificate(m_Value); ++ } ++ ++ virtual void Characters(OUString const& rChars) override ++ { ++ m_Value += rChars; ++ } ++}; ++ ++class XSecParser::XadesCertificateValuesContext ++ : public XSecParser::Context ++{ ++ public: ++ XadesCertificateValuesContext(XSecParser & rParser, ++ std::unique_ptr pOldNamespaceMap) ++ : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) ++ { ++ } ++ ++ virtual void StartElement( ++ css::uno::Reference const& xAttrs) override ++ { ++ m_rParser.HandleIdAttr(xAttrs); ++ } ++ ++ virtual std::unique_ptr CreateChildContext( ++ std::unique_ptr pOldNamespaceMap, ++ sal_uInt16 const nNamespace, OUString const& rName) override ++ { ++ if (nNamespace == XML_NAMESPACE_XADES132 && rName == "EncapsulatedX509Certificate") ++ { ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); ++ } ++ // missing: xades:OtherCertificate ++ return XSecParser::Context::CreateChildContext(std::move(pOldNamespaceMap), nNamespace, rName); ++ } ++}; ++ ++class XSecParser::XadesUnsignedSignaturePropertiesContext ++ : public XSecParser::Context ++{ ++ public: ++ XadesUnsignedSignaturePropertiesContext(XSecParser & rParser, ++ std::unique_ptr pOldNamespaceMap) ++ : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) ++ { ++ } ++ ++ virtual void StartElement( ++ css::uno::Reference const& xAttrs) override ++ { ++ m_rParser.HandleIdAttr(xAttrs); ++ } ++ ++ virtual std::unique_ptr CreateChildContext( ++ std::unique_ptr pOldNamespaceMap, ++ sal_uInt16 const nNamespace, OUString const& rName) override ++ { ++ if (nNamespace == XML_NAMESPACE_XADES132 && rName == "CertificateValues") ++ { ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); ++ } ++ // missing: ++ // xades:CounterSignature ++ // ^ old code would read a ds:Signature inside it? ++ // xades:SignatureTimeStamp ++ // xades:CompleteCertificateRefs ++ // xades:CompleteRevocationRefs ++ // xades:AttributeCertificateRefs ++ // xades:AttributeRevocationRefs ++ // xades:SigAndRefsTimeStamp ++ // xades:RefsOnlyTimeStamp ++ // xades:RevocationValues ++ // xades:AttrAuthoritiesCertValues ++ // ^ old code: was equivalent to CertificateValues ??? ++ // xades:AttributeRevocationValues ++ // xades:ArchiveTimeStamp ++ return XSecParser::Context::CreateChildContext(std::move(pOldNamespaceMap), nNamespace, rName); ++ } ++}; ++ ++class XSecParser::XadesUnsignedPropertiesContext ++ : public XSecParser::Context ++{ ++ public: ++ XadesUnsignedPropertiesContext(XSecParser & rParser, ++ std::unique_ptr pOldNamespaceMap) ++ : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) ++ { ++ } ++ ++ virtual void StartElement( ++ css::uno::Reference const& xAttrs) override ++ { ++ m_rParser.HandleIdAttr(xAttrs); ++ } ++ ++ virtual std::unique_ptr CreateChildContext( ++ std::unique_ptr pOldNamespaceMap, ++ sal_uInt16 const nNamespace, OUString const& rName) override ++ { ++ if (nNamespace == XML_NAMESPACE_XADES132 && rName == "UnsignedSignatureProperties") ++ { ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); ++ } ++ // missing: xades:UnsignedDataObjectProperties ++ return XSecParser::Context::CreateChildContext(std::move(pOldNamespaceMap), nNamespace, rName); ++ } ++}; ++ ++class XSecParser::LoSignatureLineIdContext ++ : public XSecParser::Context ++{ ++ private: ++ OUString m_Value; ++ ++ public: ++ LoSignatureLineIdContext(XSecParser & rParser, ++ std::unique_ptr pOldNamespaceMap) ++ : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) ++ { ++ } ++ ++ virtual void EndElement() override ++ { ++ m_rParser.m_pXSecController->setSignatureLineId(m_Value); ++ } ++ ++ virtual void Characters(OUString const& rChars) override ++ { ++ m_Value += rChars; ++ } ++}; ++ ++class XSecParser::LoSignatureLineValidImageContext ++ : public XSecParser::Context ++{ ++ private: ++ OUString m_Value; ++ ++ public: ++ LoSignatureLineValidImageContext(XSecParser & rParser, ++ std::unique_ptr pOldNamespaceMap) ++ : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) ++ { ++ } ++ ++ virtual void EndElement() override ++ { ++ m_rParser.m_pXSecController->setValidSignatureImage(m_Value); ++ } ++ ++ virtual void Characters(OUString const& rChars) override + { +- m_pXSecController->collectToVerify( ouIdAttr ); ++ m_Value += rChars; ++ } ++}; ++ ++class XSecParser::LoSignatureLineInvalidImageContext ++ : public XSecParser::Context ++{ ++ private: ++ OUString m_Value; ++ ++ public: ++ LoSignatureLineInvalidImageContext(XSecParser & rParser, ++ std::unique_ptr pOldNamespaceMap) ++ : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) ++ { ++ } ++ ++ virtual void EndElement() override ++ { ++ m_rParser.m_pXSecController->setInvalidSignatureImage(m_Value); ++ } ++ ++ virtual void Characters(OUString const& rChars) override ++ { ++ m_Value += rChars; ++ } ++}; ++ ++class XSecParser::LoSignatureLineContext ++ : public XSecParser::Context ++{ ++ public: ++ LoSignatureLineContext(XSecParser & rParser, ++ std::unique_ptr pOldNamespaceMap) ++ : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) ++ { ++ } ++ ++ virtual std::unique_ptr CreateChildContext( ++ std::unique_ptr pOldNamespaceMap, ++ sal_uInt16 const nNamespace, OUString const& rName) override ++ { ++ if (nNamespace == XML_NAMESPACE_LO_EXT && rName == "SignatureLineId") ++ { ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); ++ } ++ if (nNamespace == XML_NAMESPACE_LO_EXT && rName == "SignatureLineValidImage") ++ { ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); ++ } ++ if (nNamespace == XML_NAMESPACE_LO_EXT && rName == "SignatureLineInvalidImage") ++ { ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); ++ } ++ return XSecParser::Context::CreateChildContext(std::move(pOldNamespaceMap), nNamespace, rName); + } ++}; + +- if ( aName == "Signature" ) ++class XSecParser::XadesCertDigestContext ++ : public XSecParser::Context ++{ ++ private: ++ OUString m_Value; ++ sal_Int32 m_nReferenceDigestID = css::xml::crypto::DigestID::SHA1; ++ ++ public: ++ XadesCertDigestContext(XSecParser & rParser, ++ std::unique_ptr pOldNamespaceMap) ++ : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) + { +- m_rXMLSignatureHelper.StartVerifySignatureElement(); +- m_pXSecController->addSignature(); +- if (!ouIdAttr.isEmpty()) +- { +- m_pXSecController->setId( ouIdAttr ); +- } + } +- else if (aName == "SignatureMethod") ++ ++ virtual void EndElement() override + { +- OUString ouAlgorithm = xAttribs->getValueByName("Algorithm"); +- if (ouAlgorithm == ALGO_ECDSASHA1 || ouAlgorithm == ALGO_ECDSASHA256 +- || ouAlgorithm == ALGO_ECDSASHA512) +- m_pXSecController->setSignatureMethod(svl::crypto::SignatureMethodAlgorithm::ECDSA); ++ m_rParser.m_pXSecController->setCertDigest(m_Value/* FIXME , m_nReferenceDigestID*/); + } +- else if ( aName == "Reference" ) ++ ++ virtual std::unique_ptr CreateChildContext( ++ std::unique_ptr pOldNamespaceMap, ++ sal_uInt16 const nNamespace, OUString const& rName) override + { +- OUString ouUri = xAttribs->getValueByName("URI"); +- SAL_WARN_IF( ouUri.isEmpty(), "xmlsecurity.helper", "URI is empty" ); +- // Remember the type of this reference. +- OUString ouType = xAttribs->getValueByName("Type"); +- if (ouUri.startsWith("#")) ++ if (nNamespace == XML_NAMESPACE_DS && rName == "DigestMethod") + { +- /* +- * remove the first character '#' from the attribute value +- */ +- m_pXSecController->addReference( ouUri.copy(1), m_nReferenceDigestID, ouType ); ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap), m_nReferenceDigestID); + } +- else ++ if (nNamespace == XML_NAMESPACE_DS && rName == "DigestValue") + { +- /* +- * remember the uri +- */ +- m_currentReferenceURI = ouUri; +- m_bReferenceUnresolved = true; ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap), m_Value); + } ++ return XSecParser::Context::CreateChildContext(std::move(pOldNamespaceMap), nNamespace, rName); + } +- else if (aName == "DigestMethod") ++}; ++ ++class XSecParser::XadesCertContext ++ : public XSecParser::Context ++{ ++ public: ++ XadesCertContext(XSecParser & rParser, ++ std::unique_ptr pOldNamespaceMap) ++ : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) + { +- OUString ouAlgorithm = xAttribs->getValueByName("Algorithm"); ++ } + +- SAL_WARN_IF( ouAlgorithm.isEmpty(), "xmlsecurity.helper", "no Algorithm in Reference" ); +- if (!ouAlgorithm.isEmpty()) ++ virtual std::unique_ptr CreateChildContext( ++ std::unique_ptr pOldNamespaceMap, ++ sal_uInt16 const nNamespace, OUString const& rName) override ++ { ++ if (nNamespace == XML_NAMESPACE_XADES132 && rName == "CertDigest") + { +- SAL_WARN_IF( ouAlgorithm != ALGO_XMLDSIGSHA1 +- && ouAlgorithm != ALGO_XMLDSIGSHA256 +- && ouAlgorithm != ALGO_XMLDSIGSHA512, +- "xmlsecurity.helper", "Algorithm neither SHA1, SHA256 nor SHA512"); +- if (ouAlgorithm == ALGO_XMLDSIGSHA1) +- m_nReferenceDigestID = css::xml::crypto::DigestID::SHA1; +- else if (ouAlgorithm == ALGO_XMLDSIGSHA256) +- m_nReferenceDigestID = css::xml::crypto::DigestID::SHA256; +- else if (ouAlgorithm == ALGO_XMLDSIGSHA512) +- m_nReferenceDigestID = css::xml::crypto::DigestID::SHA512; +- else +- m_nReferenceDigestID = 0; ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); + } +- } +- else if (aName == "Transform") +- { +- if ( m_bReferenceUnresolved ) ++ if (nNamespace == XML_NAMESPACE_XADES132 && rName == "IssuerSerial") + { +- OUString ouAlgorithm = xAttribs->getValueByName("Algorithm"); +- +- if (ouAlgorithm == ALGO_C14N) +- /* +- * a xml stream +- */ +- { +- m_pXSecController->addStreamReference( m_currentReferenceURI, false, m_nReferenceDigestID ); +- m_bReferenceUnresolved = false; +- } ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); + } ++ return XSecParser::Context::CreateChildContext(std::move(pOldNamespaceMap), nNamespace, rName); + } +- else if (aName == "X509IssuerName") +- { +- m_ouX509IssuerName.clear(); +- m_bInX509IssuerName = true; +- } +- else if (aName == "X509SerialNumber") ++}; ++ ++class XSecParser::XadesSigningCertificateContext ++ : public XSecParser::Context ++{ ++ public: ++ XadesSigningCertificateContext(XSecParser & rParser, ++ std::unique_ptr pOldNamespaceMap) ++ : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) + { +- m_ouX509SerialNumber.clear(); +- m_bInX509SerialNumber = true; + } +- else if (aName == "X509Certificate") ++ ++ virtual std::unique_ptr CreateChildContext( ++ std::unique_ptr pOldNamespaceMap, ++ sal_uInt16 const nNamespace, OUString const& rName) override + { +- m_ouX509Certificate.clear(); +- m_bInX509Certificate = true; ++ if (nNamespace == XML_NAMESPACE_XADES132 && rName == "Cert") ++ { ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); ++ } ++ return XSecParser::Context::CreateChildContext(std::move(pOldNamespaceMap), nNamespace, rName); + } +- else if (aName == "PGPData") ++}; ++ ++class XSecParser::XadesSigningTimeContext ++ : public XSecParser::Context ++{ ++ public: ++ XadesSigningTimeContext(XSecParser & rParser, ++ std::unique_ptr pOldNamespaceMap) ++ : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) + { +- m_pXSecController->switchGpgSignature(); + } +- else if (aName == "PGPKeyID") ++ ++ virtual void StartElement( ++ css::uno::Reference const& /*xAttrs*/) override + { +- m_ouGpgKeyID.clear(); +- m_bInGpgKeyID = true; ++ m_rParser.m_ouDate.clear(); + } +- else if (aName == "PGPKeyPacket") ++ ++ virtual void EndElement() override + { +- m_ouGpgCertificate.clear(); +- m_bInGpgCertificate = true; ++ m_rParser.m_pXSecController->setDate( m_rParser.m_ouDate ); + } +- else if (aName == "loext:PGPOwner") ++ ++ virtual void Characters(OUString const& rChars) override + { +- m_ouGpgOwner.clear(); +- m_bInGpgOwner = true; ++ m_rParser.m_ouDate += rChars; + } +- else if (aName == "SignatureValue") ++}; ++ ++class XSecParser::XadesSignedSignaturePropertiesContext ++ : public XSecParser::Context ++{ ++ public: ++ XadesSignedSignaturePropertiesContext(XSecParser & rParser, ++ std::unique_ptr pOldNamespaceMap) ++ : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) + { +- m_ouSignatureValue.clear(); +- m_bInSignatureValue = true; + } +- else if (aName == "DigestValue" && !m_bInCertDigest) ++ ++ virtual void StartElement( ++ css::uno::Reference const& xAttrs) override + { +- m_ouDigestValue.clear(); +- m_bInDigestValue = true; ++ m_rParser.HandleIdAttr(xAttrs); + } +- else if (aName == "xd:CertDigest") ++ ++ virtual std::unique_ptr CreateChildContext( ++ std::unique_ptr pOldNamespaceMap, ++ sal_uInt16 const nNamespace, OUString const& rName) override + { +- m_ouCertDigest.clear(); +- m_bInCertDigest = true; ++ if (nNamespace == XML_NAMESPACE_XADES132 && rName == "SigningTime") ++ { ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); ++ } ++ if (nNamespace == XML_NAMESPACE_XADES132 && rName == "SigningCertificate") ++ { ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); ++ } ++ if (nNamespace == XML_NAMESPACE_LO_EXT && rName == "SignatureLine") ++ { ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); ++ } ++ // missing: xades:SignaturePolicyIdentifier, xades:SignatureProductionPlace, xades:SignerRole ++ return XSecParser::Context::CreateChildContext(std::move(pOldNamespaceMap), nNamespace, rName); + } +- // FIXME: Existing code here in xmlsecurity uses "xd" as the namespace prefix for XAdES, +- // while the sample document attached to tdf#76142 uses "xades". So accept either here. Of +- // course this is idiotic and wrong, the right thing would be to use a proper way to parse +- // XML that would handle namespaces correctly. I have no idea how substantial re-plumbing of +- // this code that would require. +- else if (aName == "xd:EncapsulatedX509Certificate" || aName == "xades:EncapsulatedX509Certificate") ++}; ++ ++class XSecParser::XadesSignedPropertiesContext ++ : public XSecParser::Context ++{ ++ public: ++ XadesSignedPropertiesContext(XSecParser & rParser, ++ std::unique_ptr pOldNamespaceMap) ++ : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) + { +- m_ouEncapsulatedX509Certificate.clear(); +- m_bInEncapsulatedX509Certificate = true; + } +- else if (aName == "xd:SigningTime" || aName == "xades:SigningTime") ++ ++ virtual void StartElement( ++ css::uno::Reference const& xAttrs) override + { +- m_ouDate.clear(); +- m_bInSigningTime = true; ++ m_rParser.HandleIdAttr(xAttrs); + } +- else if ( aName == "SignatureProperty" ) ++ ++ virtual std::unique_ptr CreateChildContext( ++ std::unique_ptr pOldNamespaceMap, ++ sal_uInt16 const nNamespace, OUString const& rName) override + { +- if (!ouIdAttr.isEmpty()) ++ if (nNamespace == XML_NAMESPACE_XADES132 && rName == "SignedSignatureProperties") + { +- m_pXSecController->setPropertyId( ouIdAttr ); ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); + } ++ // missing: xades:SignedDataObjectProperties ++ return XSecParser::Context::CreateChildContext(std::move(pOldNamespaceMap), nNamespace, rName); + } +- else if (aName == "dc:date") +- { +- if (m_ouDate.isEmpty()) +- m_bInDate = true; +- } +- else if (aName == "dc:description") ++}; ++ ++class XSecParser::XadesQualifyingPropertiesContext ++ : public XSecParser::Context ++{ ++ public: ++ XadesQualifyingPropertiesContext(XSecParser & rParser, ++ std::unique_ptr pOldNamespaceMap) ++ : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) + { +- m_ouDescription.clear(); +- m_bInDescription = true; + } +- else if (aName == "loext:SignatureLineId") ++ ++ virtual void StartElement( ++ css::uno::Reference const& xAttrs) override + { +- m_ouSignatureLineId.clear(); +- m_bInSignatureLineId = true; ++ m_rParser.HandleIdAttr(xAttrs); + } +- else if (aName == "loext:SignatureLineValidImage") ++ ++ virtual std::unique_ptr CreateChildContext( ++ std::unique_ptr pOldNamespaceMap, ++ sal_uInt16 const nNamespace, OUString const& rName) override + { +- m_ouSignatureLineValidImage.clear(); +- m_bInSignatureLineValidImage = true; ++ if (nNamespace == XML_NAMESPACE_XADES132 && rName == "SignedProperties") ++ { ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); ++ } ++ if (nNamespace == XML_NAMESPACE_XADES132 && rName == "UnsignedProperties") ++ { ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); ++ } ++ return XSecParser::Context::CreateChildContext(std::move(pOldNamespaceMap), nNamespace, rName); + } +- else if (aName == "loext:SignatureLineInvalidImage") ++}; ++ ++class XSecParser::DcDateContext ++ : public XSecParser::Context ++{ ++ private: ++ bool m_isIgnore = false; ++ ++ public: ++ DcDateContext(XSecParser & rParser, ++ std::unique_ptr pOldNamespaceMap) ++ : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) + { +- m_ouSignatureLineInvalidImage.clear(); +- m_bInSignatureLineInvalidImage = true; + } + +- if (m_xNextHandler.is()) ++ virtual void StartElement( ++ css::uno::Reference const& /*xAttrs*/) override + { +- m_xNextHandler->startElement(aName, xAttribs); ++ m_isIgnore = !m_rParser.m_ouDate.isEmpty(); + } +- } +- catch (css::uno::Exception& ) +- {//getCaughtException MUST be the first line in the catch block +- css::uno::Any exc = cppu::getCaughtException(); +- throw css::xml::sax::SAXException( +- "xmlsecurity: Exception in XSecParser::startElement", +- nullptr, exc); +- } +- catch (...) +- { +- throw css::xml::sax::SAXException( +- "xmlsecurity: unexpected exception in XSecParser::startElement", nullptr, +- css::uno::Any()); +- } +-} + +-void SAL_CALL XSecParser::endElement( const OUString& aName ) +-{ +- try +- { +- if (aName == "DigestValue" && !m_bInCertDigest) ++ virtual void EndElement() override + { +- m_bInDigestValue = false; ++ if (!m_isIgnore) ++ { ++ m_rParser.m_pXSecController->setDate( m_rParser.m_ouDate ); ++ } + } +- else if ( aName == "Reference" ) ++ ++ virtual void Characters(OUString const& rChars) override + { +- if ( m_bReferenceUnresolved ) +- /* +- * it must be an octet stream +- */ ++ if (!m_isIgnore) + { +- m_pXSecController->addStreamReference( m_currentReferenceURI, true, m_nReferenceDigestID ); +- m_bReferenceUnresolved = false; ++ m_rParser.m_ouDate += rChars; + } +- +- m_pXSecController->setDigestValue( m_nReferenceDigestID, m_ouDigestValue ); + } +- else if ( aName == "SignedInfo" ) ++}; ++ ++class XSecParser::DcDescriptionContext ++ : public XSecParser::Context ++{ ++ private: ++ OUString m_Value; ++ ++ public: ++ DcDescriptionContext(XSecParser & rParser, ++ std::unique_ptr pOldNamespaceMap) ++ : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) + { +- m_pXSecController->setReferenceCount(); + } +- else if ( aName == "SignatureValue" ) ++ ++ virtual void EndElement() override + { +- m_pXSecController->setSignatureValue( m_ouSignatureValue ); +- m_bInSignatureValue = false; ++ m_rParser.m_pXSecController->setDescription(m_Value); + } +- else if (aName == "X509IssuerName") ++ ++ virtual void Characters(OUString const& rChars) override + { +- m_pXSecController->setX509IssuerName( m_ouX509IssuerName ); +- m_bInX509IssuerName = false; ++ m_Value += rChars; + } +- else if (aName == "X509SerialNumber") ++}; ++ ++class XSecParser::DsSignaturePropertyContext ++ : public XSecParser::Context ++{ ++ public: ++ DsSignaturePropertyContext(XSecParser & rParser, ++ std::unique_ptr pOldNamespaceMap) ++ : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) + { +- m_pXSecController->setX509SerialNumber( m_ouX509SerialNumber ); +- m_bInX509SerialNumber = false; + } +- else if (aName == "X509Certificate") ++ ++ virtual void StartElement( ++ css::uno::Reference const& xAttrs) override + { +- m_pXSecController->setX509Certificate( m_ouX509Certificate ); +- m_bInX509Certificate = false; ++ OUString const ouIdAttr(m_rParser.HandleIdAttr(xAttrs)); ++ if (!ouIdAttr.isEmpty()) ++ { ++ m_rParser.m_pXSecController->setPropertyId( ouIdAttr ); ++ } + } +- else if (aName == "PGPKeyID") ++ ++ virtual std::unique_ptr CreateChildContext( ++ std::unique_ptr pOldNamespaceMap, ++ sal_uInt16 const nNamespace, OUString const& rName) override + { +- m_pXSecController->setGpgKeyID( m_ouGpgKeyID ); +- m_bInGpgKeyID = false; ++ if (nNamespace == XML_NAMESPACE_DC && rName == "date") ++ { ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); ++ } ++ if (nNamespace == XML_NAMESPACE_DC && rName == "description") ++ { ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); ++ } ++ return XSecParser::Context::CreateChildContext(std::move(pOldNamespaceMap), nNamespace, rName); + } +- else if (aName == "PGPKeyPacket") ++}; ++ ++class XSecParser::DsSignaturePropertiesContext ++ : public XSecParser::Context ++{ ++ public: ++ DsSignaturePropertiesContext(XSecParser & rParser, ++ std::unique_ptr pOldNamespaceMap) ++ : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) + { +- m_pXSecController->setGpgCertificate( m_ouGpgCertificate ); +- m_bInGpgCertificate = false; + } +- else if (aName == "loext:PGPOwner") ++ ++ virtual void StartElement( ++ css::uno::Reference const& xAttrs) override + { +- m_pXSecController->setGpgOwner( m_ouGpgOwner ); +- m_bInGpgOwner = false; ++ m_rParser.HandleIdAttr(xAttrs); + } +- else if (aName == "xd:CertDigest") ++ ++ virtual std::unique_ptr CreateChildContext( ++ std::unique_ptr pOldNamespaceMap, ++ sal_uInt16 const nNamespace, OUString const& rName) override + { +- m_pXSecController->setCertDigest( m_ouCertDigest ); +- m_bInCertDigest = false; ++ if (nNamespace == XML_NAMESPACE_DS && rName == "SignatureProperty") ++ { ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); ++ } ++ return XSecParser::Context::CreateChildContext(std::move(pOldNamespaceMap), nNamespace, rName); + } +- else if (aName == "xd:EncapsulatedX509Certificate" || aName == "xades:EncapsulatedX509Certificate") ++}; ++ ++class XSecParser::DsObjectContext ++ : public XSecParser::Context ++{ ++ public: ++ DsObjectContext(XSecParser & rParser, ++ std::unique_ptr pOldNamespaceMap) ++ : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) + { +- m_pXSecController->addEncapsulatedX509Certificate( m_ouEncapsulatedX509Certificate ); +- m_bInEncapsulatedX509Certificate = false; + } +- else if (aName == "xd:SigningTime" || aName == "xades:SigningTime") ++ ++ virtual void StartElement( ++ css::uno::Reference const& xAttrs) override + { +- m_pXSecController->setDate( m_ouDate ); +- m_bInSigningTime = false; ++ m_rParser.HandleIdAttr(xAttrs); + } +- else if (aName == "dc:date") ++ ++ virtual std::unique_ptr CreateChildContext( ++ std::unique_ptr pOldNamespaceMap, ++ sal_uInt16 const nNamespace, OUString const& rName) override + { +- if (m_bInDate) ++ if (nNamespace == XML_NAMESPACE_DS && rName == "SignatureProperties") ++ { ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); ++ } ++ if (nNamespace == XML_NAMESPACE_XADES132 && rName == "QualifyingProperties") + { +- m_pXSecController->setDate( m_ouDate ); +- m_bInDate = false; ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); + } ++ // missing: ds:Manifest ++ return XSecParser::Context::CreateChildContext(std::move(pOldNamespaceMap), nNamespace, rName); + } +- else if (aName == "dc:description") ++}; ++ ++class XSecParser::DsSignatureContext ++ : public XSecParser::Context ++{ ++ public: ++ DsSignatureContext(XSecParser & rParser, ++ std::unique_ptr pOldNamespaceMap) ++ : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) + { +- m_pXSecController->setDescription( m_ouDescription ); +- m_bInDescription = false; + } +- else if (aName == "loext:SignatureLineId") ++ ++ virtual void StartElement( ++ css::uno::Reference const& xAttrs) override + { +- m_pXSecController->setSignatureLineId( m_ouSignatureLineId ); +- m_bInSignatureLineId = false; ++ OUString const ouIdAttr(m_rParser.HandleIdAttr(xAttrs)); ++ m_rParser.m_rXMLSignatureHelper.StartVerifySignatureElement(); ++ m_rParser.m_pXSecController->addSignature(); ++ if (!ouIdAttr.isEmpty()) ++ { ++ m_rParser.m_pXSecController->setId( ouIdAttr ); ++ } + } +- else if (aName == "loext:SignatureLineValidImage") ++ ++ virtual std::unique_ptr CreateChildContext( ++ std::unique_ptr pOldNamespaceMap, ++ sal_uInt16 const nNamespace, OUString const& rName) override + { +- m_pXSecController->setValidSignatureImage( m_ouSignatureLineValidImage ); +- m_bInSignatureLineValidImage = false; ++ if (nNamespace == XML_NAMESPACE_DS && rName == "SignedInfo") ++ { ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); ++ } ++ if (nNamespace == XML_NAMESPACE_DS && rName == "SignatureValue") ++ { ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); ++ } ++ if (nNamespace == XML_NAMESPACE_DS && rName == "KeyInfo") ++ { ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); ++ } ++ if (nNamespace == XML_NAMESPACE_DS && rName == "Object") ++ { ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); ++ } ++ return XSecParser::Context::CreateChildContext(std::move(pOldNamespaceMap), nNamespace, rName); + } +- else if (aName == "loext:SignatureLineInvalidImage") ++}; ++ ++class XSecParser::DsigSignaturesContext ++ : public XSecParser::Context ++{ ++ public: ++ DsigSignaturesContext(XSecParser & rParser, ++ std::unique_ptr pOldNamespaceMap) ++ : XSecParser::Context(rParser, std::move(pOldNamespaceMap)) + { +- m_pXSecController->setInvalidSignatureImage( m_ouSignatureLineInvalidImage ); +- m_bInSignatureLineInvalidImage = false; + } + +- if (m_xNextHandler.is()) ++ virtual std::unique_ptr CreateChildContext( ++ std::unique_ptr pOldNamespaceMap, ++ sal_uInt16 const nNamespace, OUString const& rName) override + { +- m_xNextHandler->endElement(aName); ++ if (nNamespace == XML_NAMESPACE_DS && rName == "Signature") ++ { ++ return std::make_unique(m_rParser, std::move(pOldNamespaceMap)); ++ } ++ return XSecParser::Context::CreateChildContext(std::move(pOldNamespaceMap), nNamespace, rName); + } +- } +- catch (css::uno::Exception& ) +- {//getCaughtException MUST be the first line in the catch block +- css::uno::Any exc = cppu::getCaughtException(); +- throw css::xml::sax::SAXException( +- "xmlsecurity: Exception in XSecParser::endElement", +- nullptr, exc); +- } +- catch (...) +- { +- throw css::xml::sax::SAXException( +- "xmlsecurity: unexpected exception in XSecParser::endElement", nullptr, +- css::uno::Any()); +- } ++}; ++ ++ ++XSecParser::XSecParser(XMLSignatureHelper& rXMLSignatureHelper, ++ XSecController* pXSecController) ++ : m_pNamespaceMap(new SvXMLNamespaceMap) ++ , m_pXSecController(pXSecController) ++ , m_rXMLSignatureHelper(rXMLSignatureHelper) ++{ ++ using namespace xmloff::token; ++ m_pNamespaceMap->Add( GetXMLToken(XML_XML), GetXMLToken(XML_N_XML), XML_NAMESPACE_XML ); ++ m_pNamespaceMap->Add( "_dsig_ooo", GetXMLToken(XML_N_DSIG_OOO), XML_NAMESPACE_DSIG_OOO ); ++ m_pNamespaceMap->Add( "_dsig", GetXMLToken(XML_N_DSIG), XML_NAMESPACE_DSIG ); ++ m_pNamespaceMap->Add( "_ds", GetXMLToken(XML_N_DS), XML_NAMESPACE_DS ); ++ m_pNamespaceMap->Add( "_xades132", GetXMLToken(XML_N_XADES132), XML_NAMESPACE_XADES132); ++ m_pNamespaceMap->Add( "_xades141", GetXMLToken(XML_N_XADES141), XML_NAMESPACE_XADES141); ++ m_pNamespaceMap->Add( "_dc", GetXMLToken(XML_N_DC), XML_NAMESPACE_DC ); ++ m_pNamespaceMap->Add( "_office_libo", ++ GetXMLToken(XML_N_LO_EXT), XML_NAMESPACE_LO_EXT); + } + +-void SAL_CALL XSecParser::characters( const OUString& aChars ) ++OUString XSecParser::HandleIdAttr(css::uno::Reference const& xAttrs) + { +- if (m_bInX509IssuerName) +- { +- m_ouX509IssuerName += aChars; +- } +- else if (m_bInX509SerialNumber) +- { +- m_ouX509SerialNumber += aChars; +- } +- else if (m_bInX509Certificate) +- { +- m_ouX509Certificate += aChars; +- } +- else if (m_bInGpgCertificate) ++ OUString ouIdAttr = getIdAttr(xAttrs); ++ if (!ouIdAttr.isEmpty()) + { +- m_ouGpgCertificate += aChars; ++ m_pXSecController->collectToVerify( ouIdAttr ); + } +- else if (m_bInGpgKeyID) ++ return ouIdAttr; ++} ++ ++OUString XSecParser::getIdAttr(const css::uno::Reference< css::xml::sax::XAttributeList >& xAttribs ) ++{ ++ OUString ouIdAttr = xAttribs->getValueByName("id"); ++ ++ if (ouIdAttr.isEmpty()) + { +- m_ouGpgKeyID += aChars; ++ ouIdAttr = xAttribs->getValueByName("Id"); + } +- else if (m_bInGpgOwner) ++ ++ return ouIdAttr; ++} ++ ++/* ++ * XDocumentHandler ++ */ ++void SAL_CALL XSecParser::startDocument( ) ++{ ++ if (m_xNextHandler.is()) + { +- m_ouGpgOwner += aChars; ++ m_xNextHandler->startDocument(); + } +- else if (m_bInSignatureValue) ++} ++ ++void SAL_CALL XSecParser::endDocument( ) ++{ ++ if (m_xNextHandler.is()) + { +- m_ouSignatureValue += aChars; ++ m_xNextHandler->endDocument(); + } +- else if (m_bInDigestValue && !m_bInCertDigest) ++} ++ ++void SAL_CALL XSecParser::startElement( ++ const OUString& rName, ++ const css::uno::Reference< css::xml::sax::XAttributeList >& xAttribs ) ++{ ++ assert(m_pNamespaceMap); ++ std::unique_ptr pRewindMap( ++ SvXMLImport::processNSAttributes(m_pNamespaceMap, nullptr, xAttribs)); ++ ++ OUString localName; ++ sal_uInt16 const nPrefix(m_pNamespaceMap->GetKeyByAttrName(rName, &localName)); ++ ++ std::unique_ptr pContext; ++ ++ if (m_ContextStack.empty()) + { +- m_ouDigestValue += aChars; ++ if ((nPrefix == XML_NAMESPACE_DSIG || nPrefix == XML_NAMESPACE_DSIG_OOO) ++ && localName == "document-signatures") ++ { ++ pContext.reset(new DsigSignaturesContext(*this, std::move(pRewindMap))); ++ } ++ else ++ { ++ throw css::xml::sax::SAXException( ++ "xmlsecurity: unexpected root element", nullptr, ++ css::uno::Any()); ++ } + } +- else if (m_bInDate) ++ else + { +- m_ouDate += aChars; ++ pContext = m_ContextStack.top()->CreateChildContext( ++ std::move(pRewindMap), nPrefix, localName); + } +- else if (m_bInDescription) ++ ++ m_ContextStack.push(std::move(pContext)); ++ assert(!pRewindMap); ++ ++ try + { +- m_ouDescription += aChars; ++ m_ContextStack.top()->StartElement(xAttribs); ++ ++ if (m_xNextHandler.is()) ++ { ++ m_xNextHandler->startElement(rName, xAttribs); ++ } + } +- else if (m_bInCertDigest) +- { +- m_ouCertDigest += aChars; ++ catch (css::uno::Exception& ) ++ {//getCaughtException MUST be the first line in the catch block ++ css::uno::Any exc = cppu::getCaughtException(); ++ throw css::xml::sax::SAXException( ++ "xmlsecurity: Exception in XSecParser::startElement", ++ nullptr, exc); + } +- else if (m_bInEncapsulatedX509Certificate) ++ catch (...) + { +- m_ouEncapsulatedX509Certificate += aChars; ++ throw css::xml::sax::SAXException( ++ "xmlsecurity: unexpected exception in XSecParser::startElement", nullptr, ++ css::uno::Any()); + } +- else if (m_bInSigningTime) ++} ++ ++void SAL_CALL XSecParser::endElement(const OUString& rName) ++{ ++ assert(!m_ContextStack.empty()); // this should be checked by sax parser? ++ ++ try + { +- m_ouDate += aChars; ++ m_ContextStack.top()->EndElement(); ++ ++ if (m_xNextHandler.is()) ++ { ++ m_xNextHandler->endElement(rName); ++ } + } +- else if (m_bInSignatureLineId) +- { +- m_ouSignatureLineId += aChars; ++ catch (css::uno::Exception& ) ++ {//getCaughtException MUST be the first line in the catch block ++ css::uno::Any exc = cppu::getCaughtException(); ++ throw css::xml::sax::SAXException( ++ "xmlsecurity: Exception in XSecParser::endElement", ++ nullptr, exc); + } +- else if (m_bInSignatureLineValidImage) ++ catch (...) + { +- m_ouSignatureLineValidImage += aChars; ++ throw css::xml::sax::SAXException( ++ "xmlsecurity: unexpected exception in XSecParser::endElement", nullptr, ++ css::uno::Any()); + } +- else if (m_bInSignatureLineInvalidImage) ++ ++ if (m_ContextStack.top()->m_pOldNamespaceMap) + { +- m_ouSignatureLineInvalidImage += aChars; ++ m_pNamespaceMap = std::move(m_ContextStack.top()->m_pOldNamespaceMap); + } ++ m_ContextStack.pop(); ++} ++ ++void SAL_CALL XSecParser::characters(const OUString& rChars) ++{ ++ assert(!m_ContextStack.empty()); // this should be checked by sax parser? ++ m_ContextStack.top()->Characters(rChars); + + if (m_xNextHandler.is()) + { +- m_xNextHandler->characters(aChars); ++ m_xNextHandler->characters(rChars); + } + } + +diff --git a/xmlsecurity/source/helper/xsecparser.hxx b/xmlsecurity/source/helper/xsecparser.hxx +index d9b079aa3116..93efcb766e3e 100644 +--- a/xmlsecurity/source/helper/xsecparser.hxx ++++ b/xmlsecurity/source/helper/xsecparser.hxx +@@ -25,6 +25,10 @@ + + #include + ++#include ++ ++#include ++ + class XMLSignatureHelper; + class XSecController; + +@@ -48,47 +52,59 @@ class XSecParser: public cppu::WeakImplHelper + ******************************************************************************/ + { + friend class XSecController; ++public: ++ class Context; + private: ++ class UnknownContext; ++ class LoPGPOwnerContext; ++ class DsPGPKeyPacketContext; ++ class DsPGPKeyIDContext; ++ class DsPGPDataContext; ++ class DsX509CertificateContext; ++ class DsX509SerialNumberContext; ++ class DsX509IssuerNameContext; ++ class DsX509IssuerSerialContext; ++ class DsX509DataContext; ++ class DsKeyInfoContext; ++ class DsSignatureValueContext; ++ class DsDigestValueContext; ++ class DsDigestMethodContext; ++ class DsTransformContext; ++ class DsTransformsContext; ++ class DsReferenceContext; ++ class DsSignatureMethodContext; ++ class DsSignedInfoContext; ++ class XadesEncapsulatedX509CertificateContext; ++ class XadesCertificateValuesContext; ++ class XadesUnsignedSignaturePropertiesContext; ++ class XadesUnsignedPropertiesContext; ++ class LoSignatureLineIdContext; ++ class LoSignatureLineValidImageContext; ++ class LoSignatureLineInvalidImageContext; ++ class LoSignatureLineContext; ++ class XadesCertDigestContext; ++ class XadesCertContext; ++ class XadesSigningCertificateContext; ++ class XadesSigningTimeContext; ++ class XadesSignedSignaturePropertiesContext; ++ class XadesSignedPropertiesContext; ++ class XadesQualifyingPropertiesContext; ++ class DcDateContext; ++ class DcDescriptionContext; ++ class DsSignaturePropertyContext; ++ class DsSignaturePropertiesContext; ++ class DsObjectContext; ++ class DsSignatureContext; ++ class DsigSignaturesContext; ++ + /* + * the following members are used to reserve the signature information, + * including X509IssuerName, X509SerialNumber, and X509Certificate,etc. + */ +- OUString m_ouX509IssuerName; +- OUString m_ouX509SerialNumber; +- OUString m_ouX509Certificate; +- OUString m_ouGpgCertificate; +- OUString m_ouGpgKeyID; +- OUString m_ouGpgOwner; +- OUString m_ouCertDigest; +- OUString m_ouEncapsulatedX509Certificate; +- OUString m_ouDigestValue; +- OUString m_ouSignatureValue; + OUString m_ouDate; +- /// Characters of a element, as just read from XML. +- OUString m_ouDescription; +- OUString m_ouSignatureLineId; +- OUString m_ouSignatureLineValidImage; +- OUString m_ouSignatureLineInvalidImage; + +- /* +- * whether inside a particular element +- */ +- bool m_bInX509IssuerName; +- bool m_bInX509SerialNumber; +- bool m_bInX509Certificate; +- bool m_bInGpgCertificate; +- bool m_bInGpgKeyID; +- bool m_bInGpgOwner; +- bool m_bInCertDigest; +- bool m_bInEncapsulatedX509Certificate; +- bool m_bInSigningTime; +- bool m_bInDigestValue; +- bool m_bInSignatureValue; +- bool m_bInDate; +- bool m_bInDescription; +- bool m_bInSignatureLineId; +- bool m_bInSignatureLineValidImage; +- bool m_bInSignatureLineInvalidImage; ++ std::stack> m_ContextStack; ++ std::unique_ptr m_pNamespaceMap; + + /* + * the XSecController collaborating with XSecParser +@@ -101,22 +117,9 @@ private: + css::uno::Reference< + css::xml::sax::XDocumentHandler > m_xNextHandler; + +- /* +- * this string is used to remember the current handled reference's URI, +- * +- * because it can be decided whether a stream reference is xml based or binary based +- * only after the Transforms element is read in, so we have to reserve the reference's +- * URI when the startElement event is met. +- */ +- OUString m_currentReferenceURI; +- bool m_bReferenceUnresolved; +- +- // Relevant for ODF. The digest algorithm selected by the current DigestMethod element's +- // Algorithm attribute in the current Reference element. From css::xml::crypto::DigestID. +- sal_Int32 m_nReferenceDigestID; + XMLSignatureHelper& m_rXMLSignatureHelper; + +-private: ++ OUString HandleIdAttr(css::uno::Reference const& xAttrs); + static OUString getIdAttr(const css::uno::Reference< + css::xml::sax::XAttributeList >& xAttribs ); + +-- +cgit v1.2.1 + diff --git a/debian/python3-access2base.links b/debian/python3-access2base.links new file mode 100644 index 00000000000..f76ba1c90f7 --- /dev/null +++ b/debian/python3-access2base.links @@ -0,0 +1 @@ +usr/share/doc/libreoffice-common/access2base.html usr/share/doc/python3-access2base/access2base.html diff --git a/debian/python3-uno.NEWS b/debian/python3-uno.NEWS new file mode 100644 index 00000000000..fb4312b42c4 --- /dev/null +++ b/debian/python3-uno.NEWS @@ -0,0 +1,11 @@ +libreoffice (1:3.5.2-2) unstable; urgency=low + + * The script provider for python (which was in python3-uno before) has been + split out into libreoffice-script-provider-python as it's the same in both + variants and python3-uno should contain just the module anyway. + + If you relied on python3-uno for the script provider, install the new + package in addition. + + -- Rene Engelhard Sat, 07 Apr 2012 14:30:41 +0200 + diff --git a/debian/python3-uno.ucf b/debian/python3-uno.ucf new file mode 100644 index 00000000000..8a56cd5b703 --- /dev/null +++ b/debian/python3-uno.ucf @@ -0,0 +1 @@ +/usr/lib/libreoffice/share/.registry/pyuno.xcd /etc/libreoffice/registry/pyuno.xcd diff --git a/debian/rules b/debian/rules new file mode 100755 index 00000000000..7d8604c1577 --- /dev/null +++ b/debian/rules @@ -0,0 +1,3913 @@ +#!/usr/bin/make -f +################################################################################ +# LibreOffice source package rules file +# +# Please see debian/README for detailed documentation about the build system, and +# how to build LibreOffice. +################################################################################ +# Authors: +# Chris Halls +# Rene Engelhard +# Copyright 2002-2015 Software in the Public Interest, Inc. +# Portions Copyright 2010 Canonical Ltd. Author: Matthias Klose +# Portions Copyright 2011-2013 Canonical Ltd. Author: Bjoern Michaelsen +# Licensed under the GNU General Public License, version 2. See the file +# /usr/share/common-licenses/GPL or . +################################################################################ + +vafilt = $(subst $(2)=,,$(filter $(2)=%,$(1))) + +include /usr/share/dpkg/pkg-info.mk +CURDIR ?= $(realpath $(dir $(firstword $(MAKEFILE_LIST)))/..) +BASE_VERSION:=$(shell echo $(DEB_VERSION) | cut -d: -f1):$(DEB_VERSION_UPSTREAM) +BINARY_VERSION=$(DEB_VERSION) +#HELP_L10N_VIRTUAL_VERSION:=$(shell echo $(DEB_VERSION_UPSTREAM) | cut -d: -f2 | tr [~] [\\-]) +HELP_L10N_VIRTUAL_VERSION:=7.0 +OOVER:=7.0 +NEXT_OOVER:=$(shell echo "$(OOVER) + 0.1" | bc) + +ARCH_INDEP_PACKAGES := $(shell dh_listpackages -i) +ARCH_DEP_PACKAGES := $(shell dh_listpackages -a) +PACKAGES := $(ARCH_INDEP_PACKAGES) $(ARCH_DEP_PACKAGES) + +include /usr/share/dpkg/architecture.mk +include /usr/share/dpkg/vendor.mk +SHELL:=/bin/bash + +#SYSTEM_GCC_VERSION = $(shell gcc --version | sed -n '/^gcc/s/.*\(.\..\)\..$$/\1/p') +#FIXME +SYSTEM_GCC_VERSION = $(shell gcc --version | sed -n '/^gcc/s/.*\(.\..\)\../\1/p' | cut -d" " -f1) +ifeq "$(shell echo $(SYSTEM_GCC_VERSION) | cut -d. -f1)" "0" # gcc 10+ (0.0, 0.1, 0.2 etc.) +SYSTEM_GCC_VERSION = $(shell gcc --version | sed -n '/^gcc/s/.*\(..\..\)\../\1/p' | cut -d" " -f1) +endif + +PKGDIR:=debian/libreoffice +OODIRNAME=libreoffice +OODIR:=usr/lib/$(OODIRNAME) +OOSDKDIR:=$(OODIR)/sdk + +# Figure out who's building this package. +ifneq "$(DEB_VENDOR)" "Debian" +OOO_VENDOR:=The Document Foundation, $(DEB_PARENT_VENDOR) and $(DEB_VENDOR) +else +OOO_VENDOR=The Document Foundation/$(DEB_VENDOR) +endif +export OOO_VENDOR + +# debhelper +export DH_OPTIONS +export DH_ALWAYS_EXCLUDE=CVS:.svn:.bzr:.git +#export DH_VERBOSE=1 +# quilt +export QUILT_PATCHES=debian/patches +export QUILT_OPTIONS="-p1 -F0" + +SOURCE_TREE=. +STAMP_DIR=debian/stampdir +TARFILE_LOCATION=$(CURDIR)/tarballs +export TARFILE_LOCATION +USE_SOURCE_TARBALLS=y +USE_GIT_TARBALLS=n +ifeq "$(USE_GIT_TARBALLS)" "y" +GIT_BASEURL:=git://anongit.freedesktop.org/libreoffice +lo_sources_ver=$(shell grep AC_INIT $(SOURCE_TREE)/configure.ac | grep documentfoundation | cut -d, -f2 | sed -e 's,\[,,' -e 's,\],,') +# NOT in proper libreoffice-3-6 branch +# use ./g checkout -b tag-libreoffice-3.6.2.1 libreoffice-3.6.2.1 +GIT_TAG=libreoffice-$(lo_sources_ver) +GIT_BRANCH=libreoffice-7-0-4 +endif +ifeq "$(USE_SOURCE_TARBALLS)" "y" +lo_sources_ver=$(shell cat $(CURDIR)/sources.ver | cut -d= -f2) +endif + +######### +# Default package configuration +# +OOO_ARCHS = alpha amd64 arm64 armel armhf hppa i386 ia64 kfreebsd-amd64 kfreebsd-i386 m68k mips mipsel mips64 mips64el powerpc powerpcspe ppc64 ppc64el s390 s390x sparc sparc64 +PATCHSET=$(DEB_VENDOR) +BUILD_DEPS=\ + autoconf,\ + automake,\ + bc,\ + bison,\ + bzip2,\ + flex (>= 2.3.35), \ + fontforge-nox | fontforge, \ + gperf (>= 3.1),\ + libc0.1 (>= 2.10.2-7) [kfreebsd-any],\ + libfontconfig1-dev,\ + libfreetype6-dev (>= 2.2.0),\ + pkg-config,\ + unzip,\ + xsltproc,\ + zip,\ + zlib1g-dev\ + +BUILD_DEPS_INDEP += rdfind, symlinks + +# These are components which can be built from internal copies, or used from the +# distribution. See configure --help for valid values (--with-system-). +SYSTEM_STUFF = dicts + +ENABLE_GUI=y + +ifeq ($(filter nopython,$(DEB_BUILD_PROFILES)),) +ENABLE_PYTHON=y +ifeq "$(ENABLE_PYTHON)" "y" + CONFIGURE_FLAGS += --enable-python=system + ENABLE_SCRIPT_PROVIDER_PYTHON=y + PACKAGE_LIBRELOGO=y +endif +# THIS IS ONLY FOR TESTING. When building against a specified pythonX.Y +# this will work inside OOo but *not* from outside OOo unless the user +# uses pythonX.Y directly (and the dh_pycentral-created dependencies allow +# also the non-working default python then) - see e.g. #587402. Also +# note we are NOT working with python < 2.6 anymore! +PYTHON_VERSION=current +ifeq "$(PYTHON_VERSION)" "current" + PYTHON=python3 + export PYTHON +else + # somehow configure insists on using python3 "for pyuno". The only way to + # override this (afaics) is this... + PYTHON=python$(PYTHON_VERSION) + PYTHON_CFLAGS=$(shell pkg-config --cflags python-$(PYTHON_VERSION)) + PYTHON_LIBS=$(shell pkg-config --libs python-$(PYTHON_VERSION)) + export PYTHON PYTHON_VERSION PYTHON_CFLAGS PYTHON_LIBS +endif +endif +BUILD_ONLY_EN_US=n +ifeq ($(filter nojava,$(DEB_BUILD_PROFILES)),) + ENABLE_JAVA=y + ifeq "$(ENABLE_JAVA)" "y" + JDK=default + include /usr/share/java/java_defaults.mk + ifneq "$(JDK)" "default" + JAVA_MAINVER=7 + endif + endif +else + ENABLE_JAVA=n +endif +JAVAHELPER_MIN_VERSION= (>= 0.37~) +SYSTEM_STUFF += hunspell +SYSTEM_STUFF += altlinuxhyph +SYSTEM_STUFF += boost +BOOST_VERSION=default +ifeq "$(BOOST_VERSION)" "default" + BOOST_MINVER= (>= 1.66) + ifeq "$(shell dpkg --compare-versions $(SYSTEM_GCC_VERSION) gt 10 && echo true)" "true" + BOOST_MINVER= (>= 1.71) + endif +endif +# libmdds-dev depends on libboost-dev, which will be removed +# when you install a non-default libboostX.Y-dev +ifeq "$(BOOST_VERSION)" "default" +SYSTEM_STUFF += mdds +endif +USE_EXTERNAL_CXXLIBS=y +SYSTEM_STUFF += mythes +SYSTEM_STUFF += icu +SYSTEM_STUFF += librevenge +SYSTEM_STUFF += libwpd libwpg libwps +SYSTEM_STUFF += libvisio +SYSTEM_STUFF += libcdr +SYSTEM_STUFF += libmspub +SYSTEM_STUFF += libmwaw +SYSTEM_STUFF += libodfgen +SYSTEM_STUFF += libepubgen +SYSTEM_STUFF += libetonyek +SYSTEM_STUFF += libfreehand +# this is libe-book, NOT evolutions libebook (which is +# dlopen()'ed anyway and whose headers we need from the +# system anyways if enabled +SYSTEM_STUFF += libebook +SYSTEM_STUFF += libabw +SYSTEM_STUFF += libpagemaker +SYSTEM_STUFF += libzmf +SYSTEM_STUFF += libstaroffice +SYSTEM_STUFF += libqxp +ENABLE_QRCODEGEN=y +SYSTEM_STUFF += qrcodegen +BUILD_CAIROCANVAS=y +SYSTEM_STUFF += cairo +ifeq "$(ENABLE_GUI)" "y" +BUILD_PLASMA=y +ENABLE_QT5=n +QT5_MINVER= (>= 5.6) +endif +ifeq "$(BUILD_PLASMA)" "y" + ENABLE_KF5=y + # KF5 depends on Qt5 + ifeq "$(ENABLE_KF5)" "y" + ENABLE_QT5=y + KF5_QT5_DEPENDS := libreoffice-qt5 (= $${binary:Version}) + endif +endif +# https://www.debian.org/doc/debian-policy/ says this is not defined and must +# be ignored, but dh_strip mentions (and honours) it, so... +ifneq (noautodbgsym,$(findstring noautodbgsym,$(DEB_BUILD_OPTIONS))) +BUILD_DBGSYM_PACKAGES=y +ifeq "$(DEB_HOST_ARCH)" "amd64" +USE_DWZ=y +DWZ_ARGS:=-L 100000000 +endif +endif +SYSTEM_STUFF += xmlsec + +ifeq ($(filter noinsttest,$(DEB_BUILD_PROFILES)),) + # this changes the packages built/contents of packages (-subsequentcheckbase) + # This is not exactly allowed in https://wiki.debian.org/BuildProfileSpec#Registered_profile_names + # but it doesn't have real practical difference, does it? + ifneq (nocheck,$(findstring nocheck,$(DEB_BUILD_OPTIONS))) + BUILD_TEST_PACKAGES=y + endif +endif + +ifneq ($(MAKECMDGOALS),build-indep) +ENABLE_SYMBOLS=y +SMALL_SYMBOLS=y +endif +ifeq ($(MAKECMDGOALS),build-indep) +# no need to do a double build... +BUILD_NOGUI_PACKAGES=n +endif + +ifeq "$(ENABLE_JAVA)" "y" + SYSTEM_STUFF += beanshell + SYSTEM_STUFF += hsqldb +endif +SYSTEM_STUFF += lpsolve +USE_SHARED_LPSOLVE=y +LPSOLVE_MIN_VERSION= (>= 5.5.0.13-5+b1) +ENABLE_COINMP=y +SYSTEM_STUFF += coinmp +USE_DBUS=y +ifeq "$(USE_DBUS)" "y" + ifeq (,$(findstring linux,$(DEB_HOST_ARCH_OS))) + ENABLE_BLUETOOTH=n + else + ENABLE_BLUETOOTH=y + SYSTEM_STUFF += bluez + endif + ENABLE_PACKAGEKIT=n +endif +ENABLE_AVAHI=y +ifeq "$(ENABLE_GUI)" "y" +USE_GSTREAMER=y +endif +ENABLE_WEBDAV=y +ifeq "$(ENABLE_WEBDAV)" "y" +WEBDAV_LIB=neon + ifeq "$(WEBDAV_LIB)" "neon" + SYSTEM_STUFF += neon + NEON_SECTYPE=gnutls + NEONSONR=27 + else + SYSTEM_STUFF += apr + SYSTEM_STUFF += serf + endif +endif +SYSTEM_STUFF += redland +PACKAGE_SDK=y +ifneq ($(filter nodoc,$(DEB_BUILD_PROFILES)),) +PACKAGE_SDK_DOCS=n +else +PACKAGE_SDK_DOCS=y +endif +PACKAGE_LOKIT=y +ENABLE_CHART_TESTS=n +# will not work, uses schema/ stripped in the tarballs +ifeq "$(USE_SOURCE_TARBALLS)" "y" +ENABLE_EXPORT_VALIDATION_TESTS=n +endif +JUNIT_MIN_VER= (>= 4.8.2-2) +CURL_SECTYPE=gnutls +USE_LIBSUITESPARSE=y +SUITESPARSE_MIN_VERSION= (>= 1:3.4.0) +PARALLEL_BUILD=y +ENABLE_LDAP=y +SYSTEM_STUFF += openldap +SYSTEM_STUFF += epoxy +ifeq "$(ENABLE_JAVA)" "y" + ENABLE_REPORTBUILDER=y + SYSTEM_STUFF += jfreereport + ENABLE_MEDIAWIKI=y + SYSTEM_STUFF += apache-commons + ENABLE_SCRIPT_PROVIDER_BSH=y + ENABLE_SCRIPT_PROVIDER_JS=y + ENABLE_NLPSOLVER=y +else + ENABLE_REPORTBUILDER=n + ENABLE_MEDIAWIKI=n + ENABLE_SCRIPT_PROVIDER_BSH=n + ENABLE_SCRIPT_PROVIDER_JS=n + ENABLE_NLPSOLVER=n +endif +ENABLE_SDBC_POSTGRESQL=y +ifeq "$(ENABLE_GUI)" "y" +BUILD_GTK3=y + # introspection needs GTK3 + ifeq "$(BUILD_GTK3)" "y" + ENABLE_INTROSPECTION=y + endif +endif +ENABLE_EVO2=y +ENABLE_GIO=y +ENABLE_DCONF=y +ENABLE_RANDR=y +PACKAGE_BASE=y +SYSTEM_STUFF += graphite +SYSTEM_STUFF += harfbuzz +SYSTEM_STUFF += libexttextcat +SYSTEM_STUFF += cppunit +DEFAULT_IMAGE=colibre +IMAGES:=$(DEFAULT_IMAGE) sifr sifr_dark sifr_dark_svg breeze breeze_dark breeze_dark_svg breeze_svg elementary elementary_svg karasa_jaga sukapura sukapura_svg +# FIXME +IMAGES_PACKAGES=$(subst _,-,$(filter-out sukapura_svg,$(filter-out sifr_dark_svg,$(filter-out breeze_dark_svg,$(filter-out sifr_dark,$(filter-out breeze_dark,$(filter-out breeze_svg,$(filter-out elementary_svg,$(IMAGES))))))))) +CONFIGURE_FLAGS_INDEP += --with-theme="$(IMAGES)" +MYSQL_FLAVOUR=mariadb +# set this also to y for system-mysql.. +SYSTEM_STUFF += mariadb +SYSTEM_STUFF += postgresql +DICT_DIR=/usr/share/hunspell +HYPH_DIR=/usr/share/hyphen +THES_DIR=/usr/share/mythes +SYSTEM_STUFF += libcmis +SYSTEM_STUFF += jpeg +SYSTEM_STUFF += libxml +SYSTEM_STUFF += expat +SYSTEM_STUFF += odbc +SYSTEM_STUFF += curl +SYSTEM_STUFF += sane +ENABLE_PDFIMPORT=y +ENABLE_POPPLER=y +SYSTEM_STUFF += poppler +ENABLE_PDFIUM=y +ifneq (big,$(DEB_HOST_ARCH_ENDIAN)) +ENABLE_SKIA=y +endif +SYSTEM_STUFF += libpng +SYSTEM_STUFF += nss +ENABLE_HELP=y +ifeq "$(ENABLE_HELP)" "y" + ENABLE_HTML_HELP=y + ifeq "$(ENABLE_HTML_HELP)" "y" + HELP_DEPENDS := libreoffice-help-common (= $${binary:Version}), firefox-esr | epiphany-browser | konqueror | chromium | firefox + HELP_COMMON_DEPENDS := libjs-normalize.css + else + HELP_DEPENDS := libreoffice-writer + DEBHELPER_OPTIONS += -Nlibreoffice-help-common + endif + SYSTEM_STUFF += clucene +endif +SYSTEM_STUFF += lcms2 +# this violates the requirement that nowindows should not change the +# package contents (-dev-common here) but a extra package for this +# is too much overhead (especially since this .dll will be gone +# in LO 7.2 anyway.) +ifeq ($(filter nowindows,$(DEB_BUILD_PROFILES)),) + PACKAGE_UNOWINREG_DLL=y + ifeq "$(DEB_VENDOR)" "Debian" + BUILD_UNOWINREG_DLL=y + endif +endif +SYSTEM_STUFF += liblangtag +SYSTEM_STUFF += orcus +USE_UCPP=y +ifeq "$(USE_UCPP)" "y" + SYSTEM_STUFF += ucpp +endif +# kfreebsd runs into SIZE_MAX problems, and the rest might +# get OOM (mips(el)...) so enable mergelibs only for 64bit +# archs +ifeq (,$(filter kfreebsd,$(DEB_HOST_ARCH))) + ifeq "$(DEB_HOST_ARCH_BITS)" "64" + ENABLE_MERGELIBS=y + endif +endif +#ifeq "$(ENABLE_MERGELIBS)" "y" +# ENABLE_LTO=y +#else + ENABLE_LTO=n +#endif +USE_OPENCL=y +ENABLE_FIREBIRD=y +ifeq "$(ENABLE_FIREBIRD)" "y" + SYSTEM_STUFF += firebird + ifeq (,$(filter firebird, $(SYSTEM_STUFF))) + SYSTEM_STUFF += libatomic-ops + SYSTEM_STUFF += libtommath + endif +endif +ENABLE_EOT=y +ifeq "$(ENABLE_EOT)" "y" +SYSTEM_STUFF += libeot +endif +SYSTEM_STUFF += glm +BUILD_PPC64EL=y +BUILD_ARM64=y +SYSTEM_STUFF += gpgmepp +INSTALL_APPARMOR_PROFILES=y +ENABLE_APPARMOR_PROFILES=y +CHECK_APPARMOR_PROFILES=true +ENABLE_LIBNUMBERTEXT=y +SYSTEM_STUFF += libnumbertext + +# Default flags to pass to configure +CONFIGURE_FLAGS+= \ + --with-vendor='$(OOO_VENDOR)' \ + --with-extra-buildid='$(DEB_VENDOR) package version: $(DEB_VERSION)' \ + --prefix=/usr --mandir=/usr/share/man \ + --docdir=/usr/share/doc/libreoffice \ + --libdir=/usr/lib \ + --bindir=/usr/bin \ + --host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE) \ + --disable-online-update \ + --disable-fetch-external \ + --without-fonts --enable-build-opensymbol \ + --without-myspell-dicts \ + --with-branding=$(CURDIR)/debian/branding + +ifeq "$(ENABLE_GUI)" "y" +BUILD_DEPS += ,\ + libcups2-dev,\ + libgl-dev,\ + libice-dev,\ + libsm-dev,\ + libx11-dev,\ + libx11-xcb-dev, \ + libxaw7-dev,\ + libxext-dev,\ + libxinerama-dev,\ + libxkbfile-dev,\ + libxrender-dev,\ + libxt-dev,\ + libxtst-dev,\ + x11proto-render-dev +endif + +ifeq "$(ENABLE_HELP)" "y" +CONFIGURE_FLAGS_INDEP+= --with-help + ifeq "$(ENABLE_HTML_HELP)" "y" + CONFIGURE_FLAGS_INDEP+= --with-help=html + endif +endif + +ifeq "$(shell echo $(DEB_VERSION_UPSTREAM) | grep -E '(alpha|beta)'; echo $$?)" "1" +CONFIGURE_FLAGS += --enable-release-build +RELEASE_BUILD := y +endif + +ifeq "$(DEB_DISTRIBUTION)" "UNRELEASED" +BUGS=mailto:debian-openoffice@lists.debian.org +endif + +ifneq (terse,$(findstring terse,$(DEB_BUILD_OPTIONS))) +export verbose=t +endif + +############# +# Architecture-specific changes + +# helper to generate no_archs macros (pass name of source macro) +define gen_no_archs + _no_arch_macro = $(subst OOO_,OOO_NO_,$1) + _no_arch_tmp_$1 = $$(foreach _a,$$(filter-out $$(call $1),$(OOO_ARCHS)),!$$(_a)) + $$(_no_arch_macro) = $$(if $$(_no_arch_tmp_$1),$$(_empty) [$$(_no_arch_tmp_$1)]) +endef + +PLATFORMID := $(shell grep PLATFORMID debian/vars.$(DEB_HOST_ARCH) | cut -d"=" -f2) + + +OOO_64BIT_ARCHS = $(filter alpha amd64 arm64 ia64 kfreebsd-amd64 mips64 mips64el ppc64 ppc64el s390x sparc64, $(OOO_ARCHS)) +$(eval $(call gen_no_archs,OOO_64BIT_ARCHS)) +OOO_BE_ARCHS = $(filter hppa m68k mips mips64 powerpc powerpcspe ppc64 s390 s390x sparc sparc64,$(OOO_ARCHS)) +OOO_LE_ARCHS = $(filter-out $(OOO_BE_ARCHS),$(OOO_ARCHS)) +$(eval $(call gen_no_archs,OOO_LE_ARCHS)) + +OOO_CHECK_ARCHS := $(filter-out kfreebsd-i386 kfreebsd-amd64 mips mipsel mips64el armel,$(OOO_ARCHS)) +$(eval $(call gen_no_archs,OOO_CHECK_ARCHS)) +#OOO_JUNIT_ARCHS := i386 amd64 armhf arm64 +OOO_JUNIT_ARCHS := amd64 arm64 +$(eval $(call gen_no_archs,OOO_JUNIT_ARCHS)) +#OOO_CHECK_FATAL_ARCHS := i386 amd64 armhf arm64 +OOO_CHECK_FATAL_ARCHS := amd64 arm64 + +RUN_MAKE_CHECK=n +ifneq (nocheck,$(findstring nocheck,$(DEB_BUILD_OPTIONS))) + ifeq ($(DEB_HOST_ARCH),$(filter $(DEB_HOST_ARCH),$(OOO_CHECK_ARCHS))) + RUN_MAKE_CHECK=y + endif + ifeq "$(ENABLE_JAVA)" "y" + ifeq ($(DEB_HOST_ARCH),$(filter $(DEB_HOST_ARCH),$(OOO_JUNIT_ARCHS))) + ENABLE_JUNIT4=y + endif + endif + IGNORE_MAKE_CHECK_FAILURES=- + ifeq ($(DEB_HOST_ARCH),$(filter $(DEB_HOST_ARCH),$(OOO_CHECK_FATAL_ARCHS))) + IGNORE_MAKE_CHECK_FAILURES:= + endif +endif + +# Java... +ifeq "$(JDK)" "default" +OOO_JAVA_ARCHS = $(filter $(OOO_ARCHS),$(java6_architectures)) +else +OOO_JAVA_ARCHS = $(OOO_ARCHS) +endif +$(eval $(call gen_no_archs,OOO_JAVA_ARCHS)) + +OOO_ARCH_DEP_EXTENSIONS_ARCHS := $(OOO_ARCHS) +OOO_EXTENSIONS_ARCHS := $(OOO_ARCH_DEP_EXTENSIONS_ARCHS) + +OOO_BASE_ARCHS := $(OOO_JAVA_ARCHS) +$(eval $(call gen_no_archs,OOO_BASE_ARCHS)) +OOO_REPORTBUILDER_ARCHS := $(OOO_BASE_ARCHS) +$(eval $(call gen_no_archs,OOO_REPORTBUILDER_ARCHS)) +OOO_FIREBIRD_ARCHS := $(OOO_BASE_ARCHS) +$(eval $(call gen_no_archs,OOO_FIREBIRD_ARCHS)) +OOO_NOGUI_ARCHS := amd64 i386 arm64 armhf s390x ppc64 ppc64el +$(eval $(call gen_no_archs,OOO_NOGUI_ARCHS)) + +ifneq (,$(filter $(DEB_HOST_ARCH),$(OOO_NO_BASE_ARCHS))) + ifneq ($(DEB_HOST_ARCH),$(filter $(DEB_HOST_ARCH),$(OOO_BASE_ARCHS))) + PACKAGE_BASE=n + ENABLE_SDBC_POSTGRESQL=n + ENABLE_EVO2=n + ENABLE_REPORTBUILDER=n + DEBHELPER_OPTIONS += -Nlibreoffice-base libreoffice-base-core -Nlibreoffice-base-drivers + DEBHELPER_OPTIONS += -Nlibreoffice-evolution + DEBHELPER_OPTIONS += -Nlibreoffice-sdbc-postgresql -Nlibreoffice-sdbc-mysql + DEBHELPER_OPTIONS += -Nlibreoffice-sdbc-hsqldb -Nlibreoffice-sdbc-firebird + DEBHELPER_OPTIONS += -Nlibreoffice-report-builder-bin -Nlibreoffice-report-builder + DEBHELPER_OPTIONS += -Npython3-access2base +# CONFIGURE_FLAGS += --disable-database-connectivity + endif +endif + +ifeq (,$(filter $(DEB_HOST_ARCH),$(OOO_EXTENSIONS_ARCHS))) + ENABLE_MEDIAWIKI=n + ENABLE_NLPSOLVER=n + DEBHELPER_OPTIONS += -Nlibreoffice-wiki-publisher -Nlibreoffice-script-provider-python -Nlibreoffice-nlpsolver + CONFIGURE_FLAGS += --disable-extension-integration --disable-extensions +else + CONFIGURE_FLAGS += --enable-extension-integration +endif + +ifeq (,$(filter $(DEB_HOST_ARCH),$(OOO_JAVA_ARCHS))) + ENABLE_JAVA=n + ENABLE_REPORTBUILDER=n + ENABLE_MEDIAWIKI=n + ENABLE_NLPSOLVER=n +endif + +ifneq "$(BUILD_TEST_PACKAGES)" "y" + DEBHELPER_OPTIONS += -Nlibreoffice-subsequentcheckbase -Nlibreoffice-smoketest-data +endif + +ifeq "$(ENABLE_GUI)" "y" + ifeq ($(DEB_HOST_ARCH),$(filter $(DEB_HOST_ARCH),$(OOO_NOGUI_ARCHS))) + BUILD_NOGUI_PACKAGES=y + endif +else +CONFIGURE_FLAGS += --disable-gui +DEBHELPER_OPTIONS += -Nlibreoffice-core -Nlibreoffice-calc -Nlibreoffice-writer -Nlibreoffice-draw -Nlibreoffice-report-builder-bin -Nlibreoffice-base -Nlibreoffice-impress -Nlibreoffice-math +# transitional package.. +DEBHELPER_OPTIONS += -Nlibreoffice-kde5 +endif +ifneq "$(BUILD_NOGUI_PACKAGES)" "y" +DEBHELPER_OPTIONS += -Nlibreoffice-core-nogui -Nlibreoffice-calc-nogui -Nlibreoffice-writer-nogui -Nlibreoffice-draw-nogui -Nlibreoffice-report-builder-bin-nogui -Nlibreoffice-base-nogui -Nlibreoffice-impress-nogui -Nlibreoffice-math-nogui +endif + +############# +# Distro-specific overrides + +# Debian Buster +ifeq "$(DEB_DISTRIBUTION)" "buster-backports" + BUGS=mailto:debian-backports@lists.debian.org + SYSTEM_STUFF := $(filter-out libmwaw xmlsec mdds orcus libnumbertext,$(SYSTEM_STUFF)) + USE_DWZ := n + BUSTER_BACKPORT=y +endif + +CONFIGURE_FLAGS += $(foreach i, $(SYSTEM_STUFF),--with-system-$(i)) + +CC_PREFIX:=$(shell gcc -dumpmachine)- + +# generally use clang +USE_CLANG=n +# allow clang for skia? +ALLOW_CLANG=y + +CLANG_VERSION=default + +ifeq "$(USE_CLANG)" "y" + ENABLE_COMPILER_PLUGINS=n +endif + +ifneq "$(USE_CLANG)" "y" + ifneq "$(GCC_VERSION)" "" + ifneq "$(SYSTEM_GCC_VERSION)" "$(GCC_VERSION)" + BUILD_DEPS += , gcc-$(GCC_VERSION), g++-$(GCC_VERSION) + CONFIGURE_FLAGS+= \ + CC=$(CC_PREFIX)gcc-$(GCC_VERSION) \ + CXX=$(CC_PREFIX)g++-$(GCC_VERSION) + endif + endif + BUILD_DEPS += , gcc (>= 4:7), g++ (>= 4:7) + # Use -O0 for gcc 10 on armhf to avoid build/test failure with gcc 10 + # https://bugs.launchpad.net/ubuntu/+bug/1891623 + # In Debian this never appeared to be an actual build failure but + # this also helps for the test timeout on armv8 machines/buildds. + # (armv7 "works"). So make it conditional on whether we run checks. + # With g++-10 there also appear SIGSEGVs in/with openjdk-11 and it + # hangs at RunMacros, which also tries to use Java "Macros". + # A --without-java build passes. +ifeq "$(DEB_HOST_ARCH)" "armhf" + ifeq "$(shell dpkg --compare-versions $(SYSTEM_GCC_VERSION) gt 10 && echo true)" "true" + ifeq ($(ENABLE_JAVA),y) + ifneq (nocheck,$(findstring nocheck,$(DEB_BUILD_OPTIONS))) + ifneq (noopt,$(findstring noopt,$(DEB_BUILD_OPTIONS))) + DEB_BUILD_OPTIONS += noopt + endif + endif + endif + endif +endif + # skia build picks up clang if present (for performance reasons, + # at least on Windows...). See the thread starting at + # https://lists.freedesktop.org/archives/libreoffice/2020-April/084929.html + # Make it a explicit build-dependency so we don't have builds + # "randomly" using gcc or clang depending on whether clang is installed + # or not + ifeq (armel,$(findstring armel,$(DEB_HOST_ARCH))) + # there is no clang 11 on buster, obviously and this also fails to build with gcc 7 in buster + ifeq "$(BUSTER_BACKPORT)" "y" + ENABLE_SKIA=n + endif + endif + ifeq "$(ENABLE_SKIA)" "y" + ifeq "$(ALLOW_CLANG)" "y" + ifeq (ccache,$(findstring ccache,$(DEB_BUILD_OPTIONS))) + export CCACHE_CPP2=1 + endif + ifeq "$(CLANG_VERSION)" "default" + BUILD_DEPS += , clang (>= 1:5.0.2) [$(filter-out armel,$(OOO_LE_ARCHS))] + ifneq "$(BUSTER_BACKPORT)" "y" + # see #963162, #963167 which apparently don't exist on 11 + BUILD_DEPS += , clang (>= 1:11) [armel] + endif + else + export CLANG_CC=clang-$(CLANG_VERSION) + export CLANG_CXX=clang++-$(CLANG_VERSION) + BUILD_DEPS += , clang-$(CLANG_VERSION) [$(OOO_LE_ARCHS)] + endif + endif + endif +else + ifeq "$(CLANG_VERSION)" "default" + BUILD_DEPS += , clang (>= 1:5.0.2) + CONFIGURE_FLAGS+= CC=clang CXX=clang++ + else + BUILD_DEPS += , clang-$(CLANG_VERSION) + CONFIGURE_FLAGS+= CC=clang-$(CLANG_VERSION) CXX=clang++-$(CLANG_VERSION) + endif + ifeq "$(ENABLE_COMPILER_PLUGINS)" "y" + CONFIGURE_FLAGS += --enable-compiler-plugins + CLANGDIR := /usr/lib/llvm-$(shell $(CLANG) --version | head -n 1 | awk '{ print $$3 }' | cut -d. -f1) + ifeq "$(CLANG_VERSION)" "default" + BUILD_DEPS += , libclang-dev, llvm-dev + else + BUILD_DEPS += , libclang-$(CLANG_VERSION)-dev, llvm-$(CLANG_VERSION)-dev + endif + endif +endif +USE_GOLD=n +# leaves cruft around after building because it runs update_pch.sh.. +ENABLE_PCH=n + +ifeq "$(USE_DWZ)" "y" + BUILD_DEPS += , debhelper (>= 10.10.4) + # dwz 0.12-3 claims to have DW_OP_GNU support but still + # dwz: debian/libreoffice-core/usr/lib/libreoffice/program/libmergedlo.so: Couldn't find DIE referenced by DW_OP_GNU_parameter_ref + # happens + BUILD_DEPS += , dwz (>> 0.12-3) +endif + +ifneq "$(PACKAGE_SDK)" "y" + CONFIGURE_FLAGS += --disable-odk + ifneq "$(PACKAGE_SDK_DOCS)" "y" + CONFIGURE_FLAGS += --without-doxygen --without-javadoc + endif +else + ifeq "$(PACKAGE_SDK_DOCS)" "y" + BUILD_DEPS_INDEP += , doxygen (>= 1.8.4) , graphviz + else + CONFIGURE_FLAGS += --without-doxygen --without-javadoc + endif +endif + +ifeq "$(ENABLE_PDFIMPORT)" "y" + ifeq "$(ENABLE_POPPLER)" "y" + BUILD_DEPS += , libpoppler-dev (>= 0.12.0), libpoppler-private-dev, libpoppler-cpp-dev + else + CONFIGURE_FLAGS += --disable-poppler + endif + ifeq "$(ENABLE_PDFIUM)" "n" + CONFIGURE_FLAGS += --disable-pdfium + endif +endif + +ifneq (,$(filter graphite, $(SYSTEM_STUFF))) + BUILD_DEPS += , libgraphite2-dev (>= 0.9.3) +endif + +ifneq (,$(filter harfbuzz, $(SYSTEM_STUFF))) + BUILD_DEPS += , libharfbuzz-dev (>= 0.9.42) +endif + +ifneq (,$(filter libexttextcat, $(SYSTEM_STUFF))) + BUILD_DEPS += , libexttextcat-dev (>= 3.4.1) + TEXTCAT_DATA_RECOMMENDS := libexttextcat-data +endif + +ifneq "$(ENABLE_LDAP)" "y" + CONFIGURE_FLAGS += --disable-ldap +endif + +ifeq "$(ENABLE_LIBNUMBERTEXT)" "y" + ifneq (,$(filter libnumbertext, $(SYSTEM_STUFF))) + BUILD_DEPS += , libnumbertext-dev (>= 1.0.6) + NUMBERTEXT_DATA_RECOMMENDS := libnumbertext-data + endif +else + CONFIGURE_FLAGS += --disable-libnumbertext +endif + +ifneq (,$(filter jpeg, $(SYSTEM_STUFF))) + BUILD_DEPS += , libjpeg-dev +endif +ifneq (,$(filter libxml, $(SYSTEM_STUFF))) + BUILD_DEPS += , libxml2-dev (>= 2.8), libxml2-utils + BUILD_DEPS += , libxslt1-dev +else + CONFIGURE_FLAGS += --without-system-libxml +endif +ifneq (,$(filter xmlsec, $(SYSTEM_STUFF))) + BUILD_DEPS += , libxmlsec1-dev (>= 1.2.28) +endif +ifneq (,$(filter expat, $(SYSTEM_STUFF))) + BUILD_DEPS += , libexpat1-dev +endif +ifneq (,$(filter odbc, $(SYSTEM_STUFF))) + BUILD_DEPS += , unixodbc-dev (>= 2.2.11) +endif +ifneq (,$(filter sane, $(SYSTEM_STUFF))) + BUILD_DEPS += , libsane-dev +endif +ifneq (,$(filter libpng, $(SYSTEM_STUFF))) + BUILD_DEPS += , libpng-dev +endif + +ifneq (,$(filter curl, $(SYSTEM_STUFF))) + BUILD_DEPS += , libcurl4-$(CURL_SECTYPE)-dev +endif + +COINMP_MINVER=(>= 1.7.6+dfsg1-2) + COINUTILS_MINVER=(>= 2.10.14+repack1-1) + # go sure given #873362 + COINMP_MINVER=(>= 1.8.3-3) +ifneq ($(ENABLE_COINMP),y) + CONFIGURE_FLAGS += --disable-coinmp +else + ifneq (,$(filter coinmp, $(SYSTEM_STUFF))) + BUILD_DEPS += , coinor-libcoinmp-dev $(COINMP_MINVER), coinor-libcoinutils-dev $(COINUTILS_MINVER) + endif +endif + +ifneq (,$(filter amd64,$(DEB_HOST_ARCH))) + SMALL_SYMBOLS = n +endif + +ifeq "$(ENABLE_SYMBOLS)" "y" + # Small symbols? + ifeq "$(SMALL_SYMBOLS)" "y" + CONFIGURE_FLAGS += --enable-symbols=SMALL + DEB_CFLAGS_MAINT_STRIP := -g + DEB_CXXFLAGS_MAINT_STRIP := -g + DEB_CFLAGS_MAINT_PREPEND += -g1 + DEB_CXXFLAGS_MAINT_PREPEND += -g1 +export DEB_CFLAGS_MAINT_STRIP DEB_CXXFLAGS_MAINT_STRIP +export DEB_CFLAGS_MAINT_PREPEND DEB_CXXFLAGS_MAINT_PREPEND + else + CONFIGURE_FLAGS += --enable-symbols + endif +else + DEB_CFLAGS_MAINT_STRIP := -g + DEB_CXXFLAGS_MAINT_STRIP := -g +export DEB_CFLAGS_MAINT_STRIP DEB_CXXFLAGS_MAINT_STRIP +endif +export DPKG_EXPORT_BUILDFLAGS=y +include /usr/share/dpkg/buildflags.mk +ifeq (debug,$(findstring debug,$(DEB_BUILD_OPTIONS))) + CONFIGURE_FLAGS += --enable-debug +endif +ifeq (noopt,$(findstring noopt,$(DEB_BUILD_OPTIONS))) + CONFIGURE_FLAGS += --disable-optimized +endif + +ifeq "$(ENABLE_PYTHON)" "y" +PYMAJOR:=$(shell $(PYTHON) -c "import sys; print (sys.version_info[0])") +PYMINOR:=$(shell $(PYTHON) -c "import sys; print (sys.version_info[1])") +PYMINORPLUS1:=$(shell $(PYTHON) -c "import sys; print (sys.version_info[1]+1)") +PYTHON_SITE:=debian/python3-uno/$(shell $(PYTHON) -c 'from distutils import sysconfig; print(sysconfig.get_python_lib())') +endif + + BUILD_DEPS += , $(PYTHON) +ifeq "$(ENABLE_PYTHON)" "y" + BUILD_DEPS += , $(PYTHON)-dev (>= 3.3) + BUILD_DEPS += , $(PYTHON)-distutils + BUILD_DEPS += , dh-python + ifeq "$(RUN_MAKE_CHECK)" "y" + ifneq (nocheck,$(findstring nocheck,$(DEB_BUILD_OPTIONS))) + BUILD_DEPS += , $(PYTHON)-lxml + else + CONFIGURE_FLAGS += --without-lxml + endif + endif +endif + + BUILD_DEPS += , debhelper-compat (= 12) +ifeq "$(BUILD_DBGSYM_PACKAGES)" "y" + # from debhelper changelog + BUILD_DEPS += , dpkg-dev (>= 1.18.2~) +else + BUILD_DEPS += , dpkg-dev (>= 1.17.14) +endif + + ifeq "$(RUN_MAKE_CHECK)" "y" + BUILD_DEPS += , locales$(OOO_NO_CHECK_ARCHS) + BUILD_DEPS += , gdb$(OOO_NO_CHECK_ARCHS) + BUILD_DEPS += , fontconfig$(OOO_NO_CHECK_ARCHS) + BUILD_DEPS += , fonts-liberation2$(OOO_NO_CHECK_ARCHS) + BUILD_DEPS += , fonts-crosextra-carlito$(OOO_NO_CHECK_ARCHS) + # https://lists.freedesktop.org/archives/libreoffice/2017-May/077764.html + BUILD_DEPS += , fonts-dejavu$(OOO_NO_CHECK_ARCHS) + ifneq (,$(filter cppunit, $(SYSTEM_STUFF))) + BUILD_DEPS += , libcppunit-dev (>= 1.14)$(OOO_NO_CHECK_ARCHS) + endif + # 17:35 <@sberg_> vmiklos, oh, what kind of poor test is that? "warn:sal.osl:3785:2:sal/osl/unx/process.cxx:344: ChildStatusProc : starting 'pstoedit' failed" etc. is what I see in workdir/CppunitTest/filter_eps_test.test.log... + BUILD_DEPS += , pstoedit$(OOO_NO_CHECK_ARCHS) + BUILD_DEPS += , imagemagick$(OOO_NO_CHECK_ARCHS) + BUILD_DEPS += , ghostscript$(OOO_NO_CHECK_ARCHS) + BUILD_DEPS += , hunspell-en-us$(OOO_NO_CHECK_ARCHS) + BUILD_DEPS += , hyphen-en-us$(OOO_NO_CHECK_ARCHS) + else + CONFIGURE_FLAGS += --without-cppunit + endif + ifeq "$(ENABLE_JUNIT4)" "y" + BUILD_DEPS += , junit4 $(JUNIT_MIN_VER) [$(OOO_JUNIT_ARCHS)] + else + CONFIGURE_FLAGS += --without-junit + endif + ifeq "$(ENABLE_CHART_TESTS)" "y" + CONFIGURE_FLAGS += --enable-chart-tests + endif + ifeq "$(ENABLE_EXPORT_VALIDATION_TESTS)" "y" + BUILD_DEPS += , libofficeotron-java$(OOO_NO_CHECK_ARCHS) , libodfvalidator-java$(OOO_NO_CHECK_ARCHS) + else + CONFIGURE_FLAGS += --without-export-validation + endif +ifneq "$(BUILD_ONLY_EN_US)" "y" + ifeq (lang=,$(findstring lang=,$(DEB_BUILD_OPTIONS))) + ISOS=$(shell echo "$(DEB_BUILD_OPTIONS) " | sed -n 's/^.*lang=\([^\s].*\)\s.*/\1/p' | awk '{ print $$1 }' | sed -e 's/,/ /g') + ifeq "$(ENABLE_HELP)" "n" + HELPISOS= + else + HELPISOS=$(shell echo "$(DEB_BUILD_OPTIONS) " | sed -n 's/^.*lang=\([^\s].*\)\s.*/\1/p' | awk '{ print $$1 }' | sed -e 's/,/ /g') + endif + LANGPACKISOS=$(shell echo "$(DEB_BUILD_OPTIONS) " | sed -n 's/^.*lang=\([^\s].*\)\s.*/\1/p' | awk '{ print $$1 }' | sed -e 's/,/ /g') + else + # Note that the first one here *has to be* en-US. the first one gets + # gid_Module_Root as filelist later and the rest gid_Module_Root.$iso + # but we can't/shouldn't do dynamic switching, so let en-US be the first + # one to that gid_Module_Root always is english and the other langpacks + # have gid_Module_Root.$iso + #ISOS=$(shell $(SOURCE_TREE)/bin/lo-xlate-lang -i all') + ISOS:=en-US af am ar as ast be bg bn br bs ca ca-valencia cs cy da de dz el \ + en-GB en-ZA eo es et eu fa fi fr ga gd gl gu gug he hi hr hu id is it ja \ + ka kk km kmr-Latn kn ko lt lv mk mn ml mr nb ne nl nn nr nso oc om or \ + pa-IN pl pt pt-BR ro ru rw si sk sl sr sr-Latn ss st sv szl \ + ta te tg th tn tr ts ug uk uz ve vi xh zh-CN zh-TW zu + ifeq "$(ENABLE_HELP)" "n" + HELPISOS:= + else + #HELPISOS:=$(shell $(SOURCE_TREE)/bin/lo-xlate-lang -i all') + HELPISOS:=en-US ca ca-valencia cs da de dz el en-GB es et eu fi fr gl hi hu id it \ + ja km ko nl om pl pt pt-BR ru sk sl sv tr vi zh-CN zh-TW + endif + #LANGPACKISOS:=$(shell $(SOURCE_TREE)/bin/lo-xlate-lang -i all') + LANGPACKISOS:=en-US af am ar as ast be bg bn br bs ca ca-valencia cs cy da de dz el \ + en-GB en-ZA eo es et eu fa fi fr ga gd gl gu gug he hi hr hu id is it ja \ + ka kk km kmr-Latn kn ko lt lv mk mn ml mr nb ne nl nn nr nso oc om or \ + pa-IN pl pt pt-BR ro ru rw si sk sl sr sr-Latn ss st sv szl \ + ta te tg th tn tr ts ug uk uz ve vi xh zh-CN zh-TW zu + endif +else + ISOS=en-US + ifeq "$(ENABLE_HELP)" "n" + HELPISOS= + else + HELPISOS=en-US + endif + LANGPACKISOS=en-US +endif +BUILD_ISOS = $(ISOS) + +ifneq "$(BUILD_ONLY_EN_US)" "y" + ifneq "$(BUILD_ISOS)" "en-US" + CONFIGURE_FLAGS_LANG += --with-lang="$(BUILD_ISOS)" + CONFIGURE_FLAGS_INDEP += $(CONFIGURE_FLAGS_LANG) + BUILD_DEPS_INDEP += , gettext + endif +endif + +ifeq "$(ENABLE_JAVA)" "y" + BUILD_DEPS += , maven-repo-helper + ifeq "$(JDK)" "default" + JAVA_HOME=/usr/lib/jvm/default-java + BUILD_DEPS += , java-common (>= 0.61) + DEFAULT_JDK := $(call java_dependency, default-jdk) + # build-depend on 1.9 (upstream needs it anyway for module-info support) + BUILD_DEPS += , $(shell echo $(DEFAULT_JDK) | sed -e 's/default-jdk/default-jdk (>= 2:1.9)/') + endif + ifeq "$(JDK)" "openjdk" + BUILD_DEPS += , openjdk-$(JAVA_MAINVER)-jdk + JAVA_HOME=/usr/lib/jvm/java-$(JAVA_MAINVER)-openjdk-$(DEB_HOST_ARCH) + endif + TEST_JAVA_HOME=$(JAVA_HOME) + ifeq "$(ENABLE_MEDIAWIKI)" "y" + BUILD_DEPS_INDEP += , ant (>= 1.7.0)$(OOO_NO_JAVA_ARCHS) , ant-optional (>= 1.7.0)$(OOO_NO_JAVA_ARCHS) + else + # report-builder is done in build-arch already + ifneq (,$(filter jfreereport, $(SYSTEM_STUFF))) + BUILD_DEPS += , ant (>= 1.6.5)$(OOO_NO_JAVA_ARCHS) + else + BUILD_DEPS_INDEP += , ant (>= 1.6.5)$(OOO_NO_JAVA_ARCHS) + endif + endif + # but upstream also says --target=1.8 so 1.8 is fine in runtime + JAVA_RUNTIME_DEPENDS = default-jre (>= 2:1.8) + JAVA_RUNTIME_DEPENDS += | java8-runtime + # Suns Java "packages" + JAVA_RUNTIME_DEPENDS += | jre +export JAVA_HOME + CONFIGURE_FLAGS += --with-jdk-home=$(JAVA_HOME) + JAVA_COMMON_DEPENDS= , libreoffice-java-common + JAVA_COMMON_DEPENDS_VERSION:= (>= $(BASE_VERSION)~) + ifeq "$(PACKAGE_SDK)" "y" + ifeq "$(PACKAGE_UNOWINREG_DLL)" "y" + ifeq "$(BUILD_UNOWINREG_DLL)" "y" + CONFIGURE_FLAGS_INDEP += --enable-build-unowinreg + BUILD_DEPS_INDEP += , g++-mingw-w64-i686 + WIN_TRIPLET := i686-w64-mingw32 + CONFIGURE_FLAGS_INDEP += --with-mingw-cross-compiler=$(WIN_TRIPLET)-g++ + endif + endif + endif + ifeq "$(ENABLE_MEDIAWIKI)" "y" + CONFIGURE_FLAGS_INDEP += --enable-ext-wiki-publisher + endif + ifeq "$(ENABLE_REPORTBUILDER)" "y" + # report-builder + ifneq (,$(filter jfreereport, $(SYSTEM_STUFF))) + REPORT_BUILDER_BUILD_DEPS += , libbase-java$(OOO_NO_REPORTBUILDER_ARCHS) , libsac-java$(OOO_NO_REPORTBUILDER_ARCHS) , libxml-java (>= 1.1.6)$(OOO_NO_REPORTBUILDER_ARCHS) , libflute-java (>= 1.1.6)$(OOO_NO_REPORTBUILDER_ARCHS) , libpentaho-reporting-flow-engine-java (>= 0.9.4)$(OOO_NO_REPORTBUILDER_ARCHS) , liblayout-java (>= 0.2.10)$(OOO_NO_REPORTBUILDER_ARCHS) , libloader-java (>= 1.1.6)$(OOO_NO_REPORTBUILDER_ARCHS) , libformula-java (>= 1.1.7)$(OOO_NO_REPORTBUILDER_ARCHS) , librepository-java (>= 1.1.6)$(OOO_NO_REPORTBUILDER_ARCHS) , libfonts-java (>= 1.1.6)$(OOO_NO_REPORTBUILDER_ARCHS) , libserializer-java (>= 1.1.6)$(OOO_NO_REPORTBUILDER_ARCHS) + REPORT_BUILDER_JAR_DEPENDS := , libbase-java, libsac-java, libxml-java (>= 1.1.6), libflute-java (>= 1.1.6), libpentaho-reporting-flow-engine-java (>= 0.9.4), liblayout-java (>= 0.2.10), libloader-java (>= 1.1.6), libformula-java (>= 1.1.7), librepository-java (>= 1.1.6), libfonts-java (>= 1.1.6), libserializer-java (>= 1.1.6) + CONFIGURE_FLAGS += --with-libbase-jar=/usr/share/java/libbase.jar --with-libxml-jar=/usr/share/java/libxml.jar --with-flute-jar=/usr/share/java/flute.jar --with-jfreereport-jar=/usr/share/java/flow-engine.jar --with-liblayout-jar=/usr/share/java/liblayout.jar --with-libloader-jar=/usr/share/java/libloader.jar --with-libformula-jar=/usr/share/java/libformula.jar --with-librepository-jar=/usr/share/java/librepository.jar --with-libfonts-jar=/usr/share/java/libfonts.jar --with-libserializer-jar=/usr/share/java/libserializer.jar + endif + ifneq (,$(filter apache-commons, $(SYSTEM_STUFF))) + REPORT_BUILDER_BUILD_DEPS += , libcommons-logging-java$(OOO_NO_JAVA_ARCHS) + REPORT_BUILDER_JAR_DEPENDS += , libcommons-logging-java + CONFIGURE_FLAGS += --with-commons-logging-jar=/usr/share/java/commons-logging.jar + endif + BUILD_DEPS += $(REPORT_BUILDER_BUILD_DEPS) + else + CONFIGURE_FLAGS += --disable-report-builder + endif + ifeq "$(ENABLE_NLPSOLVER)" "y" + CONFIGURE_FLAGS_INDEP += --enable-ext-nlpsolver + endif + OOO_OFFICEBEAN_DEP = libofficebean-java + BUILD_DEPS += , javahelper $(JAVAHELPER_MIN_VERSION) +else + CONFIGURE_FLAGS += --without-java + DEBHELPER_OPTIONS += -Nlibreoffice-officebean -Nlibofficebean-java -Nlibreoffice-java-common -Nlibreoffice-script-provider-bsh -Nlibreoffice-script-provider-js -Nlibreoffice-subsequentcheckbase -Nlibunoil-java -Nlibofficebean-java -Nlibjuh-java -Nlibridl-java -Nlibunoloader-java -Nlibjurt-java -Nliblibreoffice-java -Nlibreoffice-sdbc-hsqldb +endif + +ifeq "$(ENABLE_JAVA)" "y" + ifeq "$(shell $(JAVA_HOME)/bin/java -version 2>&1 | grep -q Zero && echo true)" "true" + #RUN_MAKE_CHECK:=n + ENABLE_JUNIT4=n + endif +endif + +ifneq (,$(filter nss, $(SYSTEM_STUFF))) + BUILD_DEPS+= , libnss3-dev (>= 3.12.3) + BUILD_DEPS+= , libnspr4-dev +endif + +ifeq "$(USE_UCPP)" "y" + ifneq (,$(filter ucpp, $(SYSTEM_STUFF))) + IDLC_CPP_DEPENDS := ucpp + endif +else +# hardcode 4.7 as 4.8 fails: +# 14:17 <@caolan> ah, "build fails with cpp 4.8.0, this is fixable by passing +# -P, but then idlc produces empty urd files" + IDLC_CPP_DEPENDS := cpp-4.7 + CONFIGURE_FLAGS += --with-idlc-cpp=cpp-4.7 +endif + BUILD_DEPS += , $(IDLC_CPP_DEPENDS) + +ifneq (,$(filter hunspell, $(SYSTEM_STUFF))) + BUILD_DEPS += , libhunspell-dev (>= 1.1.5-2) +endif + CONFIGURE_FLAGS += --with-external-dict-dir=$(DICT_DIR) + +ifneq (,$(filter altlinuxhyph, $(SYSTEM_STUFF))) + BUILD_DEPS += , libhyphen-dev (>= 2.4) +endif + CONFIGURE_FLAGS += --with-external-hyph-dir=$(HYPH_DIR) + +ifneq (,$(filter boost, $(SYSTEM_STUFF))) + ifneq "$(BOOST_VERSION)" "default" + BUILD_DEPS += , libboost$(BOOST_VERSION)-dev $(BOOST_MINVER), libboost-date-time$(BOOST_VERSION)-dev $(BOOST_MINVER), libboost-iostreams$(BOOST_VERSION)-dev, libboost-filesystem$(BOOST_VERSION)-dev, libboost-locale$(BOOST_VERSION)-dev + #BUILD_DEPS += , libboost-thread$(BOOST_VERSION)-dev, libboost-program-options$(BOOST_VERSION)-dev + ifeq (,$(filter orcus, $(SYSTEM_STUFF))) + BUILD_DEPS += , libboost-system$(BOOST_VERSION)-dev $(BOOST_MINVER), libboost-iostreams$(BOOST_VERSION)-dev $(BOOST_MINVER), libboost-program-options$(BOOST_VERSION)-dev $(BOOST_MINVER), libboost-filesystem$(BOOST_VERSION)-dev $(BOOST_MINVER) + endif + else + BUILD_DEPS += , libboost-dev $(BOOST_MINVER), libboost-date-time-dev $(BOOST_MINVER), libboost-iostreams-dev $(BOOST_MINVER), libboost-filesystem-dev $(BOOST_MINVER), libboost-locale-dev $(BOOST_MINVER) + #BUILD_DEPS += , libboost-thread-dev, libboost-program-options-dev + ifeq (,$(filter orcus, $(SYSTEM_STUFF))) + BUILD_DEPS += , libboost-system-dev $(BOOST_MINVER), libboost-iostreams-dev $(BOOST_MINVER), libboost-program-options-dev $(BOOST_MINVER), libboost-filesystem-dev $(BOOST_MINVER) + endif + endif + ifeq "$(shell if [ -e /usr/lib/$(DEB_HOST_MULTIARCH)/libboost_date_time.so ]; then echo true; fi)" "true" + CONFIGURE_FLAGS += --with-boost-libdir=/usr/lib/$(DEB_HOST_MULTIARCH) + endif +endif + +ifneq "$(ENABLE_SKIA)" "y" + CONFIGURE_FLAGS += --disable-skia +endif + +ifneq (,$(filter mdds, $(SYSTEM_STUFF))) + BUILD_DEPS += , libmdds-dev (>= 1.5), libmdds-dev (<< 1.8~) +endif + +ifneq (,$(filter orcus, $(SYSTEM_STUFF))) + BUILD_DEPS += , liborcus-dev (>= 0.16), liborcus-dev (<< 0.17~) +endif + +ifneq (,$(filter clucene, $(SYSTEM_STUFF))) + BUILD_DEPS += , libclucene-dev (>= 2.3.3.4-4.1) +endif + +ifeq "$(USE_EXTERNAL_CXXLIBS)" "y" + ifneq (,$(filter librevenge, $(SYSTEM_STUFF))) + BUILD_DEPS += , librevenge-dev, librevenge-dev (<< 0.1~) + endif + ifneq (,$(filter libwpd, $(SYSTEM_STUFF))) + BUILD_DEPS += , libwpd-dev (>= 0.10), libwpd-dev (<< 0.11~) + endif + ifneq (,$(filter mythes, $(SYSTEM_STUFF))) + BUILD_DEPS += , libmythes-dev (>= 2:1.2) + endif + ifneq (,$(filter libwps, $(SYSTEM_STUFF))) + BUILD_DEPS += , libwps-dev (>= 0.4), libwps-dev (<< 0.5~) + ifeq "$(RUN_MAKE_CHECK)" "y" + BUILD_DEPS += , libwps-dev (>= 0.4.9) + endif + endif + ifneq (,$(filter libwpg, $(SYSTEM_STUFF))) + BUILD_DEPS += , libwpg-dev (>= 0.3), libwpg-dev (<< 0.4~) + endif + ifneq (,$(filter libvisio, $(SYSTEM_STUFF))) + BUILD_DEPS += , libvisio-dev (>= 0.1), libvisio-dev (<< 0.2~) + endif + ifneq (,$(filter libcdr, $(SYSTEM_STUFF))) + BUILD_DEPS += , libcdr-dev (>= 0.1), libcdr-dev (<< 0.2~) + endif + ifneq (,$(filter libmspub, $(SYSTEM_STUFF))) + BUILD_DEPS += , libmspub-dev (>= 0.1), libmspub-dev (<< 0.2~) + endif + ifneq (,$(filter libmwaw, $(SYSTEM_STUFF))) + BUILD_DEPS += , libmwaw-dev (>= 0.3.1), libmwaw-dev (<< 0.4~) + ifeq "$(RUN_MAKE_CHECK)" "y" + BUILD_DEPS += , libmwaw-dev (>= 0.3.15) + endif + endif + ifneq (,$(filter libodfgen, $(SYSTEM_STUFF))) + BUILD_DEPS += , libodfgen-dev (>= 0.1), libodfgen-dev (<< 0.2~) + endif + ifneq (,$(filter libepubgen, $(SYSTEM_STUFF))) + BUILD_DEPS += , libepubgen-dev (>= 0.1.0), libepubgen-dev (<< 0.2~) + endif + ifneq (,$(filter libetonyek, $(SYSTEM_STUFF))) + BUILD_DEPS += , libetonyek-dev, libetonyek-dev (<< 0.2~) + ifeq "$(RUN_MAKE_CHECK)" "y" + BUILD_DEPS += , libetonyek-dev (>= 0.1.8) + endif + endif + ifneq (,$(filter libfreehand, $(SYSTEM_STUFF))) + BUILD_DEPS += , libfreehand-dev (>= 0.1), libfreehand-dev (<< 0.2~) + endif + ifneq (,$(filter libabw, $(SYSTEM_STUFF))) + BUILD_DEPS += , libabw-dev (>= 0.1), libabw-dev (<< 0.2~) + endif + ifneq (,$(filter libpagemaker, $(SYSTEM_STUFF))) + BUILD_DEPS += , libpagemaker-dev, libpagemaker-dev (<< 0.1~) + endif + ifneq (,$(filter libzmf, $(SYSTEM_STUFF))) + BUILD_DEPS += , libzmf-dev, libzmf-dev (<< 0.1~) + endif + ifneq (,$(filter libstaroffice, $(SYSTEM_STUFF))) + BUILD_DEPS += , libstaroffice-dev, libstaroffice-dev (<< 0.1~) + ifeq "$(RUN_MAKE_CHECK)" "y" + BUILD_DEPS += , libstaroffice-dev (>= 0.0.3) + endif + endif + ifneq (,$(filter libqxp, $(SYSTEM_STUFF))) + BUILD_DEPS += , libqxp-dev, libqxp-dev (<< 0.1~) + endif + ifneq (,$(filter libebook, $(SYSTEM_STUFF))) + BUILD_DEPS += , libe-book-dev (>= 0.1), libe-book-dev (<< 0.2~) + ifeq "$(RUN_MAKE_CHECK)" "y" + BUILD_DEPS += , libe-book-dev (>= 0.1.2) + endif + endif + ifneq (,$(filter libcmis, $(SYSTEM_STUFF))) + BUILD_DEPS += , libcmis-dev (>= 0.5.2~), libcmis-dev (<< 0.6~) + endif + ifeq "$(ENABLE_QRCODEGEN)" "y" + ifneq (,$(filter qrcodegen, $(SYSTEM_STUFF))) + BUILD_DEPS += , libqrcodegencpp-dev + endif + else + CONFIGURE_FLAGS += --disable-qrcodegen + endif +endif + CONFIGURE_FLAGS += --with-external-thes-dir=$(THES_DIR) + +ifeq "$(INSTALL_APPARMOR_PROFILES)" "y" + BUILD_DEPS += , dh-apparmor + ifeq "$(CHECK_APPARMOR_PROFILES)" "true" + BUILD_DEPS += , apparmor + endif +endif + +ifeq "$(ENABLE_EOT)" "y" + CONFIGURE_FLAGS += --enable-eot + ifneq (,$(filter libeot, $(SYSTEM_STUFF))) + BUILD_DEPS += , libeot-dev + endif +endif + +ifneq (,$(filter lcms2, $(SYSTEM_STUFF))) + BUILD_DEPS += , liblcms2-dev +endif + +ifneq (,$(filter openldap, $(SYSTEM_STUFF))) + BUILD_DEPS += , libldap2-dev +endif + +ifneq (,$(filter liblangtag, $(SYSTEM_STUFF))) + BUILD_DEPS += , liblangtag-dev (>= 0.4) +endif + +ifneq (,$(filter icu, $(SYSTEM_STUFF))) + BUILD_DEPS += , libicu-dev (>= 52) +endif + + +ifeq "$(BUILD_CAIROCANVAS)" "y" + ifneq (,$(filter cairo, $(SYSTEM_STUFF))) + BUILD_DEPS+= , libcairo2-dev + endif +else + CONFIGURE_FLAGS+= --disable-cairo +endif + +ifeq "$(ENABLE_KF5)" "y" + CONFIGURE_FLAGS += --enable-kf5 + BUILD_DEPS += , libkf5coreaddons-dev, libkf5i18n-dev, libkf5config-dev, libkf5windowsystem-dev, libkf5kio-dev +endif + PLASMA_ICONSET_DEP=libreoffice-style-breeze +ifeq "$(ENABLE_QT5)" "y" + CONFIGURE_FLAGS += --enable-qt5 + BUILD_DEPS += , qtbase5-dev $(QT5_MINVER), qt5-qmake $(QT5_MINVER), qtbase5-dev-tools $(QT5_MINVER) + BUILD_DEPS += , libqt5x11extras5-dev $(QT5_MINVER) + BUILD_DEPS += , libglib2.0-dev (>= 2.4) + BUILD_DEPS += , libxcb1-dev + BUILD_DEPS += , libxcb-icccm4-dev + ifeq "$(BUSTER_BACKPORT)" "y" + # for correct qmake/moc + BUILD_DEPS += , qtchooser + export QT_SELECT=5 + endif +endif + +ifeq "$(MYSQL_FLAVOUR)" "default" + BUILD_DEPS += , default-libmysqlclient-dev +else + ifeq "$(MYSQL_FLAVOUR)" "mysql" + ifneq (,$(filter mariadb, $(SYSTEM_STUFF))) + BUILD_DEPS += , libmysqlclient-dev + endif + MARIADBCONFIG=/usr/bin/mysql_config + endif + ifeq "$(MYSQL_FLAVOUR)" "mariadb" + ifneq (,$(filter mariadb, $(SYSTEM_STUFF))) + BUILD_DEPS += , libmariadb-dev + endif + MARIADBCONFIG=/usr/bin/mariadb_config + endif +endif + +ifeq "$(ENABLE_FIREBIRD)" "y" + BASE_FIREBIRD_RECOMMENDS = libreoffice-sdbc-firebird [$(OOO_FIREBIRD_ARCHS)] + ifneq (,$(filter libatomic-ops, $(SYSTEM_STUFF))) + BUILD_DEPS += , libatomic-ops-dev (>= 7.3~alpha1+git20110913-1)$(OOO_NO_FIREBIRD_ARCHS) + endif + ifneq (,$(filter libtommath, $(SYSTEM_STUFF))) + BUILD_DEPS += , libtommath-dev$(OOO_NO_FIREBIRD_ARCHS) + endif + ifneq (,$(filter firebird, $(SYSTEM_STUFF))) + BUILD_DEPS += , firebird-dev (>= 3.0.0.32483.ds4-4)$(OOO_NO_FIREBIRD_ARCHS) + # we need libEngine12.so + ifeq "$(RUN_MAKE_CHECK)" "y" + BUILD_DEPS += , firebird3.0-server-core $(OOO_NO_FIREBIRD_ARCHS) + endif + FIREBIRD_ENGINE_DEPENDS += firebird3.0-server-core + endif +else + CONFIGURE_FLAGS += --disable-firebird-sdbc + DEBHELPER_OPTIONS += -Nlibreoffice-sdbc-firebird +endif + +ifeq "$(BUILD_GTK3)" "y" + BUILD_DEPS += , libgtk-3-dev (>= 3.18.0), libglib2.0-dev (>= 2.38.0) + ifneq (cairo,$(findstring cairo,$(SYSTEM_STUFF))) + $(error GTK3 build fails without system-cairo!!) + endif + ifeq (,$(filter epoxy, $(SYSTEM_STUFF))) + BUILD_DEPS += , libegl1-mesa-dev + endif + GNOME_GTK_RECOMMENDS += libreoffice-gtk3 + ifeq "$(ENABLE_INTROSPECTION)" "y" + BUILD_DEPS += , gobject-introspection (>= 1.32.0), libgirepository1.0-dev (>= 1.32) + CONFIGURE_FLAGS += --enable-introspection + else + DEBHELPER_OPTIONS+= -Ngir1.2-lokdocview-0.1 + endif +endif + +ifeq "$(ENABLE_EVO2)" "n" + CONFIGURE_FLAGS += --disable-evolution2 + DEBHELPER_OPTIONS += -Nlibreoffice-evolution +else + CONFIGURE_FLAGS += --enable-evolution2 + BUILD_DEPS += , libebook1.2-dev + LIBEBOOK_DEP = $(shell debian/scripts/get_libebook_dep.sh) +endif + +ifeq "$(ENABLE_SDBC_POSTGRESQL)" "y" + ifneq (,$(filter postgresql, $(SYSTEM_STUFF))) + BUILD_DEPS += , libpq-dev (>= 9.0~) + else + BUILD_DEPS += , libkrb5-dev + endif +else + CONFIGURE_FLAGS += --disable-postgresql-sdbc + DEBHELPER_OPTIONS += -Nlibreoffice-sdbc-postgresql +endif + +ifeq "$(ENABLE_RANDR)" "y" + BUILD_DEPS += , libxrandr-dev +else + CONFIGURE_FLAGS += --disable-randr +endif + +ifneq "$(ENABLE_PYTHON)" "y" + DEBHELPER_OPTIONS+= -Npython3-uno -Nlibreoffice-script-provider-python -Npython3-access2base + CONFIGURE_FLAGS += --disable-python +else + PYUNO_DEPENDS = python3-uno (>= 4.4.0~beta2) + CONFIGURE_FLAGS += --enable-python=system +endif + +ifneq "$(PACKAGE_LIBRELOGO)" "y" + DEBHELPER_OPTIONS+= -Nlibreoffice-librelogo +endif + +ifeq "$(ENABLE_JAVA)" "y" + ifneq (,$(filter hsqldb, $(SYSTEM_STUFF))) + HSQLDB_MINVER= (>> 1.8.0.10) + HSQLDB_JAR=/usr/share/java/hsqldb1.8.0.jar + BUILD_DEPS += , libhsqldb1.8.0-java $(HSQLDB_MINVER)$(OOO_NO_JAVA_ARCHS) , libarchive-zip-perl$(OOO_NO_JAVA_ARCHS) + BASE_HSQLDB_DEPENDS = libhsqldb1.8.0-java $(HSQLDB_MINVER) + CONFIGURE_FLAGS += --with-hsqldb-jar=$(HSQLDB_JAR) + else + BUILD_DEPS += , libservlet3.1-java + endif + ifeq "$(ENABLE_SCRIPT_PROVIDER_BSH)" "y" + ifneq (,$(filter beanshell, $(SYSTEM_STUFF))) + BUILD_DEPS_INDEP += , libbsh-java + endif + CONFIGURE_FLAGS += --enable-scripting-beanshell + else + CONFIGURE_FLAGS += --disble-scripting-beanshell + DEBHELPER_OPTIONS += -Nlibreoffice-script-provider-bsh + endif + ifeq "$(ENABLE_SCRIPT_PROVIDER_JS)" "y" + CONFIGURE_FLAGS += --enable-scripting-javascript + else + CONFIGURE_FLAGS += --disable-scripting-javascript + DEBHELPER_OPTIONS += -Nlibreoffice-script-provider-js + endif +endif + +ifneq (,$(filter lpsolve, $(SYSTEM_STUFF))) + ifeq "$(USE_SHARED_LPSOLVE)" "y" + BUILD_DEPS += , liblpsolve55-dev $(LPSOLVE_MIN_VERSION), lp-solve $(LPSOLVE_MIN_VERSION) + LPSOLVE_DEP = lp-solve $(LPSOLVE_MIN_VERSION) + else + BUILD_DEPS += , liblpsolve55-dev $(LPSOLVE_MIN_VERSION) + endif + ifeq "$(USE_LIBSUITESPARSE)" "y" + BUILD_DEPS += , libsuitesparse-dev $(SUITESPARSE_MIN_VERSION) + else + BUILD_DEPS += , libufsparse-dev + endif +endif + +ifeq "$(USE_DBUS)" "y" + BUILD_DEPS += , libdbus-1-dev (>= 0.60) + CONFIGURE_FLAGS += --enable-dbus + ifeq "$(ENABLE_BLUETOOTH)" "y" + BUILD_DEPS += , libglib2.0-dev (>= 2.4) + ifneq (,$(filter bluez, $(SYSTEM_STUFF))) + BUILD_DEPS += , libbluetooth-dev [linux-any] + endif + else + CONFIGURE_FLAGS += --disable-sdremote-bluetooth + endif + ifeq "$(ENABLE_PACKAGEKIT)" "y" + CONFIGURE_FLAGS += --enable-packagekit + endif +endif + +ifeq "$(ENABLE_AVAHI)" "y" + BUILD_DEPS += , libavahi-client-dev + CONFIGURE_FLAGS += --enable-avahi +endif + +ifeq "$(USE_GSTREAMER)" "y" + BUILD_DEPS += , libgstreamer1.0-dev + CONFIGURE_FLAGS += --enable-gstreamer-1-0 + BUILD_DEPS += , libgstreamer-plugins-base1.0-dev + GSTREAMER_PLUGINS_SUGGESTS += , gstreamer1.0-plugins-base, gstreamer1.0-plugins-good, gstreamer1.0-plugins-ugly, gstreamer1.0-plugins-bad, gstreamer1.0-libav +else + CONFIGURE_FLAGS += --disable-gstreamer-1-0 +endif + +ifeq "$(ENABLE_WEBDAV)" "y" + ifeq "$(WEBDAV_LIB)" "neon" + ifneq (,$(filter neon, $(SYSTEM_STUFF))) + ifneq "$(NEON_SECTYPE)" "openssl" + BUILD_DEPS += , libneon$(NEONSONR)-$(NEON_SECTYPE)-dev + else + BUILD_DEPS += , libneon$(NEONSONR)-dev + endif + endif + else + ifneq (,$(filter apr, $(SYSTEM_STUFF))) + BUILD_DEPS += , libaprutil1-dev + endif + ifneq (,$(filter serf, $(SYSTEM_STUFF))) + BUILD_DEPS += , libserf-dev + endif + endif + CONFIGURE_FLAGS += --with-webdav=$(WEBDAV_LIB) +else + CONFIGURE_FLAGS += --with-webdav=no +endif + +ifeq "$(ENABLE_HELP)" "n" + CONFIGURE_FLAGS += --without-helppack-integration --without-help +endif + +ifneq (,$(filter redland, $(SYSTEM_STUFF))) + BUILD_DEPS += , librdf0-dev (>= 1.0.16-2) +endif + +ifeq "$(ENABLE_GUI)" "y" + ifneq (,$(filter epoxy, $(SYSTEM_STUFF))) + BUILD_DEPS += , libepoxy-dev (>= 1.2) + else + BUILD_DEPS += , libegl1-mesa-dev + endif +endif +ifneq (,$(filter glm, $(SYSTEM_STUFF))) + BUILD_DEPS += , libglm-dev (>= 0.9.9~a2) +endif + +ifneq (,$(filter gpgmepp, $(SYSTEM_STUFF))) + BUILD_DEPS+= , libgpgmepp-dev, libgpgme-dev, libgpg-error-dev +endif +ifeq "$(RUN_MAKE_CHECK)" "y" + BUILD_DEPS+= , gpg + BUILD_DEPS+= , gpgconf + BUILD_DEPS+= , gpg-agent +endif + +ifeq "$(ENABLE_GIO)" "y" + ifneq "$(BUILD_GTK3)" "y" + BUILD_DEPS += , libglib2.0-dev (>= 2.26.0) + endif +else + CONFIGURE_FLAGS += --disable-gio +endif + +ifeq "$(ENABLE_DCONF)" "y" + BUILD_DEPS += , libdconf-dev (>= 0.15.2) +else + CONFIGURE_FLAGS += --disable-dconf +endif + +ifeq ($(ENABLE_MERGELIBS),y) + CONFIGURE_FLAGS += --enable-mergelibs +endif + +ifeq ($(ENABLE_LTO),y) + CONFIGURE_FLAGS += --enable-lto +endif + +ifeq ($(USE_GOLD),y) + CONFIGURE_FLAGS += --enable-ld=gold +else +# --enable-ld=gold is default for debug builds if found +ifneq (debug,$(findstring debug,$(DEB_BUILD_OPTIONS))) + CONFIGURE_FLAGS += --disable-ld +endif +endif +ifneq (,$(findstring mips,$(DEB_HOST_ARCH))) +#10:46 < _rene_> can anyone shed a light on /<>/workdir/LinkTarget/Executable/bestreversemap: error while loading shared libraries: +# /<>/instdir/program/libuno_sal.so.3: ELF file ABI version invalid? both were built in the same LO build +#10:47 < _rene_> mips64el, apparently since gcc9 or new(er) binutils? +#10:47 < _rene_> on an other binary: +#10:47 < _rene_> file /home/rene/libreoffice-6.3.1~rc2/instdir/program/libunoidllo.so +# /home/rene/libreoffice-6.3.1~rc2/instdir/program/libunoidllo.so: ELF 64-bit LSB shared object, MIPS, MIPS64 rel2 version 1 (SYSV), +# dynamically linked, BuildID[sha1]=82f15433db9000b9dfee24ed07e2082ffb439dfd, with debug_info, not stripped +#10:47 < _rene_> (eller, mips64el chroot) +#[...] +#13:49 < aurel32> _rene_: the problem is the ABI version, ie those library have Version ABI: 5 instead of 0 for normal binaries +#13:50 < aurel32> the ABI version 5 will be used for gnu hash support in mips +#13:51 < aurel32> support has been added to binutils trunk recently, although the default is still sysv hash style +#13:51 < aurel32> and glibc support is still being reviewed, it might land in 2.31 +#13:51 < aurel32> previous version of libreoffice used -Wl,--hash-style=sysv +#13:52 < aurel32> now it seems it autodetect that binutils has gnu hash support and it passes -Wl,--hash-style=gnu +#13:52 < aurel32> but there is no support for the full toolchain yet +#13:54 < _rene_> so I need to force -Wl,--hash-style=sysv? +#13:54 < aurel32> --with-linker-hash-style +#13:54 < aurel32> Use linker with --hash-style=